์์ ๊ฐ MAX๋ก ๊ณจ๋ ๋ฌธ์ ์ ๋์ ํ๋ค๊ฐ ์ค๋ฒ ๋ฌธ์ ๋ก ๊ฒฝํ์น ๋ ์์๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค โ ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋์ค์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ค์ ํ์ด๋ด์ผ๊ฒ ๋ค.
๋ฌธ์
๋ถ๋ถํฉ์ ๊ตฌํ๋ ๊ฑธ ๋ดค์ ๋ ์ ํ์ ์ธ ํฌ ํฌ์ธํฐ ์ ํ์ด๋ค.
์ ์ถ๋ ฅ ์์
์์ด๋์ด ํ๋ฆ
1) start, end, total(S์ ๋น๊ตํ ๋ถ๋ถํฉ ์ ์ฅ ๋ณ์) ์ด๊ธฐํ
2) start, end ์ด๋ ๋ฐฉํฅ ์๊ฐ
โฝ ๋๋ค ์ธ๋ฑ์ค๊ฐ ์ปค์ง๋ ๋ฐฉํฅ
โฝ start๋ ์ธ๋ฑ์ค๊ฐ ์ปค์ง๋ ๋ฐฉํฅ, end๋ ์ธ๋ฑ์ค๊ฐ ์์์ง๋ ๋ฐฉํฅ
→ ๋ถ๋ถ ์์ด์ ์ต์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ๋ชฉํ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค ์ธ๋ฑ์ค๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
3) start, end ๊ฐ ๋ณํ ์กฐ๊ฑด ์ค์ ๋ฐ ์์ด ๊ธธ์ด ํ์ธ
โฝ total >= S → ์ผ๋จ ์ ๋ต ํ๋ณด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํ์ธ ํ ๋ค์ ์ซ์๋ก ๋์ด๊ฐ๊ธฐ ์ํด start += 1
โฝ ํ์ฌ answer ๊ฐ๊ณผ ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ ํฉ ์์ด์ ๋ง๋ฌ์ ๋ ์์ด ๊ธธ์ด๋ฅผ ๋น๊ตํ๊ณ ๋ ์์ ๊ฐ์ผ๋ก answer ๊ฐฑ์
โฝ total < S → total ๊ฐ์ arr[end] ๊ฐ์ ๋ํด์ฃผ๊ณ end += 1
4) ํ์ธ์ด ๋๋๋ ์กฐ๊ฑด ์ค์
โฝ end == N์ผ ๊ฒฝ์ฐ ๋๊น์ง ๋ค ํ์ธํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ while๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
์ ์ฒด ์ฝ๋
# Gold 4
n, s = map(int, input().split())
arr = list(map(int, input().split()))
start, end = 0, 0
total = 0
# ์์์ ํฐ ๊ฐ์ผ๋ก ์ง์
answer = 100001
while True:
if total >= s:
total -= arr[start]
answer = min(answer, end-start)
start += 1
else:
if end == n:
break
else:
total += arr[end]
end += 1
# ์ด๊ธฐ๊ฐ์ด ๊ทธ๋๋ก๋ผ๋ฉด ๋ต์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ 0 ์ถ๋ ฅ
if answer == 100001:
print(0)
else:
print(answer)
ํฌ ํฌ์ธํฐ ์ ํ ๋ฌธ์ ์์ ์ธ๋ฑ์ค ๊ฐ์ด start์ผ ๋๊น์ง์ ๊ฐ์ ๋นผ๋ ์ฝ๋๊ฐ ์ข ์ข ๋ณด์ด๋๋ฐ ์ฌ์ค ์ ์๋ฏธ๋ฅผ ์ ํํ๊ฒ ์ดํดํ์ง ๋ชปํ๋ค. ๊ณ์ ๋ํด๋๊ฐ๋ ๋ฐฉ์์ด ํธํด์ ๊ทธ๋ ๊ฒ ์ฐ๊ณ ์๊ธด ํ๋ฐ ๋๋ฌด ํ ๊ฐ์ง ๋ฐฉ๋ฒ๋ง ์ฐ๋ฉด ์ฌ๊ณ ๋ฐฉ์์ด ๊ฑฐ๊ธฐ ๊ฐํ๊น๋ด ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅ ์ค์ด๋ค. ํฌ ํฌ์ธํฐ ์ ํ ์ด๋ฒ์ ๋ด์คฌ์ง๋ง ๋ค์์ ๊ทธ๋ฅ ๋ณด๋ด์ง ์๊ฒ ๋ค ๐ค
'Problem Solving > BOJ & Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 11256๋ฒ: Jelly Bean (0) | 2022.02.03 |
---|---|
[BOJ] 5177๋ฒ: Format Error! (0) | 2022.02.03 |
[BOJ] 2003๋ฒ: ์๋ค์ ํฉ 2 (0) | 2021.07.09 |
[BOJ] 1991๋ฒ: ํธ๋ฆฌ ์ํ (0) | 2021.07.07 |
[BOJ] 1260๋ฒ: DFS์ BFS (2) | 2021.06.27 |