[BOJ][๐ก4][๋ฐฑ์ค#01806] ๋ถ๋ถํฉ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
10,000 ์ดํ์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด N์ง๋ฆฌย ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ์์ด์์ ์ฐ์๋ ์๋ค์ ๋ถ๋ถํฉ ์ค์ ๊ทธ ํฉ์ด S ์ด์์ด ๋๋ ๊ฒ ์ค, ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (10 โค N < 100,000)๊ณผย S (0 < S โค 100,000,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์์ด์ด ์ฃผ์ด์ง๋ค. ์์ด์ ๊ฐ ์์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด์ ธ ์์ผ๋ฉฐ, 10,000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ตฌํ๊ณ ์ ํ๋ ์ต์์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ๊ทธ๋ฌํ ํฉ์ ๋ง๋๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์
์ ๋ ฅ
10 15
5 1 3 5 10 7 4 9 2 8
์ถ๋ ฅ
2
My Sol
import sys
input = sys.stdin.readline
N, S = map(int, input().split())
arr = list(map(int, input().split()))
sum_lst = [0]*(N+1)
for i in range(1, N+1):
sum_lst[i] = sum_lst[i-1] + arr[i-1]
ans = 100001
s = 0
e = 1
while s!=N:
if sum_lst[e] - sum_lst[s] >= S:
if e-s < ans:
ans = e-s
s += 1
else:
if e != N:
e += 1
else:
s += 1
print(ans) if ans < 100001 else print(0)
ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๋ฌธ์ ์๋ค. ์ด๋ป๊ฒ ํธ๋์ง ๋ชฐ๋ผ์ ํ์ด(์ถ์ฒ)๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ซ์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ผ๋ฉด ๋์ ํฉ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , 0๊ณผ 1๋ถํฐ ์์ํ๋ ํฌ์ธํฐ๋ฅผ ๋ง๋ค์ด S ๊ฒฝ๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฌ์ธํฐ๋ฅผ ํ๋์ฉ ์ด๋์ํค๋ฉด์ ๋์ ํฉ ์ฐจ์ด๊ฐ S ์ด์์ด๋ผ๋ฉด e์ s ๊ฐ ์ฐจ์ด๋ฅผ ์ต์๊ฐ ans์ ๊ณ์ ๊ฐฑ์ ํ๋ฉฐ ์ธ๋ฑ์ค๊ฐ N ์ผ ๊นจ๊น์ง ๋ฌ๋ ค๊ฐ๋ค. S๋ณด๋ค ๋์ ํฉ ์ฐจ์ด๊ฐ ์์ผ๋ฉด e๋ฅผ ๋๋ ค์ฃผ์ด S์ ๊ทผ์ ํ๋๋ก ํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
answer = 100000
n, m = map(int,input().split())
nums = list(map(int,input().split()))
i = 0
j = 0
s = nums[0]
l = 0
while i < n:
if s >= m :
l = j - i + 1
if answer > l:
answer = l
s -= nums[i]
i += 1
else:
j += 1
if j == n:
break
s += nums[j]
print(0 if answer == 100000 else answer)
์ฐ์ฐ์๊ฐ์ด 20% ์ ๋ ๋น ๋ฅธ ํ์ด๋ฅผ ๋ฐ๊ฒฌํด ๋ถ์ํด๋ณด๋ ค ํ๋ค. ๋๋ ๋์ ํฉ์ ๊ณ์ฐํด์ฃผ๊ณ ์์ํ๋๋ฐ, ์ด ๋ถ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์ซ์ ๋ฆฌ์คํธ์์ ๊ฐ์ ๋ํด์ฃผ๊ณ ๋นผ์ฃผ๋ ๊ณผ์ ์ ํตํด ์ฒ์์ ๋์ ํฉ ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์๋ตํ ์ ์์๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ