๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜

[baekjoon] 1806 ๋ถ€๋ถ„ํ•ฉ (python)

be__simon 2021. 7. 27. 17:10

1806 ๋ถ€๋ถ„ํ•ฉ

๋ฌธ์ œ


์ˆ˜์—ด์—์„œ ์—ฐ์†๋œ ์ˆ˜๋“ค์˜ ๋ถ€๋ถ„ํ•ฉ ์ค‘์—์„œ ํ•ฉ์ด S์ด์ƒ ์ด๊ณ  ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๊ตฌ๊ฐ„ ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์•ผํ•œ๋‹ค.

์ ‘๊ทผ


๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ดค์„ ๋•Œ, ์ˆ˜์—ด์˜ ๋ชจ๋“  ์›์†Œ๋“ค์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ์›์†Œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๊ตฌ๊ฐ„์„ ํƒ์ƒ‰ํ•ด๋ณด๋ฉด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜๋‹ค.
๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด O(N^2)๋กœ ํƒ€์ž„์•„์›ƒ์ด ๋‚  ๊ฒƒ์ด๋‹ค. (0.5์ดˆ์˜ ์‹œ๊ฐ„ ์ œํ•œ..)

์–ด๋–ค ๊ตฌ๊ฐ„์˜ ํ•ฉ ์ด๋ผ๊ณ  ํ•˜๋ฉด ๋จผ์ € ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๊ฐ€ ๋– ์˜ค๋ฅด๊ธด ํ•˜์ง€๋งŒ, ๋ชจ๋“  ๊ตฌ๊ฐ„์„ ๋ช…์‹œํ•ด์ค˜์•ผํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ์™€๋Š” ๋งž์ง€ ์•Š๋Š”๋‹ค.
(์˜คํžˆ๋ ค O(N^2 logn) ์ผ ๊ฒƒ ๊ฐ™์€๋ฐ?)

์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ O(N) ์•ˆ์— ํƒ์ƒ‰์„ ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

code


N, S = map(int, input().split())

seq = list(map(int, input().split()))
s = 0
sum = 0
answer = 0

for e in range(N):
  sum += seq[e]

  while sum >= S:
    len = e - s + 1
    answer = len if answer == 0 else min(answer, len)
    sum -= seq[s]
    s += 1

print(answer)

ํˆฌํฌ์ธํ„ฐ๋ฅผ ์“ธ ๋•Œ๋Š” s๋“  e๋“  ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋ณต๋ฌธ์—์„œ ์ง„ํ–‰ํ•˜๊ณ  ๊ทธ ์•ˆ์—์„œ ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๋•ก๊ฒจ์ฃผ๋Š”(?) ๋ฐฉ์‹์œผ๋กœ ํ•˜๋Š”๊ฒŒ ํŽธํ•œ ๊ฒƒ ๊ฐ™๋‹ค.