์๋ง ๊ตฌํ์ชฝ์ ํฌํฌ์ธํฐ ๋์๋ค๋ ์๋ฆฌ๊ฐ ์์ด ์ด์ ํ๋ฃจ์ข
์ผ ํฌํฌ์ธํฐ ๊ณต๋ถํ๋๋ผ ๊ฒ์๊ธ์ ๋ชป์ฌ๋ ธ์ต๋๋ค ใ
ใ
...
ํ์ง๋ง ํฐ ์ํ์ด ์์์ผ๋...๋ฐ๋ก ๊ณจ๋4 ํฌํฌ์ธํฐ ๋ฌธ์ ๋ฅผ ์๋ ฅ์ ํ์ต๋๋ค!
1806๋ฒ - ๋ถ๋ถํฉ
์์ด์ด ์ฃผ์ด์ง๋ฉด S๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋ถ๋ถ์์ด์ ํฉ ์ค์์ ๊ฐ์ฅ ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ์์ด์ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์ ๋๋ค.
์ผ๋จ ์ ๋ฌธ์ ์ ๋์จ ์์ด์ ๊ทธ๋๋ก ๊ฐ์ ธ์์ต๋๋ค. ์ฌ๊ธฐ์ ํฌํฌ์ธํฐ ๊ฐ๋
์ ์ ์ฉํ ๊ฒ๋๋ค.
lst.popleft()๋ฅผ ํตํด ๊ฐ์ ํฉ์ด 15๊ฐ ๋๊ธฐ ์ ๊น์ง ์์๋ฅผ ๊ณ์ ๊ธ์ด์ต์๋ค.
๊ทธ๋ฐ๋ฐ ๊ธ์ด์ค๋ค ๋ณด๋ ๊ฐ์ ํฉ์ด 15๋ฅผ ๋์ 24๊ฐ ๋์์ต๋๋ค!
์ด๋ฌ๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ์์ด์ด๋ ํด๋น ๋ถ๋ถ์์ด์ ํฌ๊ธฐ๋ฅผ ๋ฐ๋ก ๊ธฐ๋กํ๊ณ
์ต์ข
์ ์ธ ๋ชฉ์ ์ 15๊ฐ ๋๋ ์ ์ผ ์์ ํฌ๊ธฐ์ ๋ถ๋ถ์์ด์ด๋ quene๋ฅผ popํด์ ์ต๋ํ ํฌ๊ธฐ๋ฅผ ์ค์ฌ๋ด
์๋ค.
5๋ฅผ popleftํด๋ 19๊ฐ ๋๋ฏ๋ก ์ด ์์ด ํฌ๊ธฐ(4)๋ํ ๋ฐ๋ก ๊ธฐ๋กํด๋๊ณ ๋ ๋นผ๋ด
์๋ค.
1์ popleftํด๋, 3์ popleftํด๋ 15๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฏ๋ก ๋ถ๋ถ์์ด์ ํฌ๊ธฐ๋ฅผ ๋ฐ๋ก ๊ธฐ๋กํด๋๊ณ ๋ ๋บด๋ด
์๋ค.
๋๋์ด 10๋ง ๋จ๊ฒ๋์ด ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํฉ๋๋ค. ์ด์ ์๋ถ๋ถ์ผ๋ก ๋ค์ ๋์๊ฐ์ ํฉ์ฐ 15์ด์์ด ๋ ๋๊น์ง lst์์ ์์๋ฅผ ๋ค์ ๊ธ์ด์ต์๋ค.
ํฌํฌ์ธํฐ๋ ์ด์ฒ๋ผ ์์์ ๊ณผ ๋์ ์ ์ก๊ณ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด ๋์ ์ ๋๋ฆฌ๊ณ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์์์ ์ ๋นผ๋ ํ์์, ์ด์ค for๋ฌธ์ผ๋ก O(N^2)์ ์ฒ๋ฆฌ๋๋ ์์
์ 2๊ฐ์ ํฌ์ธํฐ์ ์์ง์์ผ๋ก O(N)์ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
์ถ๋ ฅ๊ฐ์ ํตํด ๊ณผ์ ์ ์ดํด๋ณด๋ฉด ์์ ๊ฐ์ ๋๋์ ๋๋ค.
์ ๊ณผ์ ์ ์ฝ๋ฉํด๋ด ์๋ค.
from collections import deque
import sys
input = sys.stdin.readline
ํด๋น ๋ฌธ์ ๋ ์๊ฐ์ ํ์ด 0.5์ด๋ก ๋งค์ฐ ๊ธ๋ฐํ๋ฏ๋ก sysinput์ ์ฌ์ฉํด์ค๋๋ค.
N,S = map(int,input().split())
lst = deque(list(map(int,input().split())))
๋ฐฐ์ด์ ํฌ๊ธฐ, ํฉ์ฐ ์กฐ๊ฑด, lst๋ฑ์ ๋ฐ์์ฃผ๊ณ
quene = deque([lst[0]])
ํฌํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ que๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋๋ค.
cum_sum = lst[0]
lst.popleft()
min = 100000001
ํ๊ฐ์ง ์ฃผ์ํ ์ ์ด ์์ต๋๋ค. ๋ถ๋ถ๋ฐฐ์ด์ ํฉ์ฐ๊ฐ์ ๊ตฌํ ๋ sum(๋ถ๋ถ๋ฐฐ์ด)์ ํ๊ฒ๋๋ฉด sum ํจ์๋ฅผ 100000๋ฒ ๊ฐ๊น์ด ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ์๊ฐ์ ํ์ ๊ฑฐ๋ฆด ํ๋ฅ ์ด ๊ตใ ก์ฅํ ๋์ต๋๋ค. ๋ฐ๋ผ์ ๋์ ํฉ์ cum_sum์ ํตํด ๋ฐ๋ก ๊ธฐ์ฌํด์ฃผ๊ฒ ์ต๋๋ค.
while True:
try:
if cum_sum < S:
tmp1 = lst.popleft()
cum_sum += tmp1
quene.append(tmp1)
๋ง์ฝ ๋ถ๋ถ์์ด์ ํฉ์ด ์ ์์์์ ๋ดค๋ ๊ฒ์ฒ๋ผ 15๋ณด๋ค ์์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ค๋ฉด lst์์ ์์๋ฅผ ๊ธ์ด์ quene์ ์ถ๊ฐํด์ค์๋ค.
else:
if len(quene) < min:
min = len(quene)
tmp2 = quene.popleft()
cum_sum -= tmp2
๋ง์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ quene์ ๊ธธ์ด ์ค์์ ์ ์ผ ์์ธ ๊ธธ์ด๋ฅผ quene์ ๋ฃ์ด์ฃผ๋๋ก ํฉ๋๋ค.
except:
break
quene์ ๋ค์จ์ ์์ธ๊ฐ ๋ ๊ฒฝ์ฐ์ break์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๊ณ
print(min)
๋ง์ง๋ง์ผ๋ก min์ ์ถ๋ ฅํ๋ฉด ๋๋ ๊ฒ ๊ฐ์ง๋ง
๊ณจ๋์ ๋ฒฝ์ ๊ทธ๋ ๊ฒ ํธ๋ฝํธ๋ฝํ์ง ์์ต๋๋ค...
๋ก์ง์ด ์ฌ๋ฐ๋ฅธ๋ฐ ํ๋ฆฌ๊ฒ ๋์จ๋ค๋ฉด ํญ์ ๋ฐ๋ก๋ฅผ ์๊ฐํด๋ด์ผ ํฉ๋๋ค.
- ํ ์คํธ์ผ์ด์ค๊ฐ 10/10/11113211111 ์ผ๋
ํ ๊ฐ์ง ์ซ์๊ฐ ์กฐ๊ฑด S๋ฅผ ๋ง์กฑ์ํฌ๋งํผ S๋ณด๋ค ํฌ๊ฒ ๋์๋ฒ๋ฆฐ๋ค๋ฉด ๋ต์ ๋ฌด์กฐ๊ฑด 1์ด ๋ฉ๋๋ค.
- min์ด ์ ์ญํ ์ ๋ชปํด์ ๊ทธ๋๋ก ๋์๋ฒ๋ฆด ๊ฒฝ์ฐ
๋ง์ฝ์ ๋ญ ํด๋ ํฉ์ฐ S๊ฐ ๋ง์กฑ๋์ง ์๋๋ค๋ฉด
else:
if len(quene) < min:
min = len(quene)
tmp2 = quene.popleft()
cum_sum -= tmp2
๊ตฌ๋ฌธ ์์ฒด๊ฐ ์คํ๋์ง ์์ ์ต์๊ฐ์ ๊ตฌํ๋ ค๊ณ ๋ min๊ฐ์ด ์ด๊ธฐ๊ฐ 100000001๋ก ๊ทธ๋๋ก ์ ์ง๋๊ฒ ๋ฉ๋๋ค.
์ด ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ์ณ๋ด
์๋ค.
for values in lst:
if values >= S:
boolean = True
if boolean == True:
print(1)
else:
ํฌํฌ์ธํฐ ์ฝ๋๋ฅผ ์คํ์ํค๊ธฐ ์ ์ ์์๋ค์ ๋ค ๊ฒ์ฌํด์ S๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์๊ฐ ์์ผ๋ฉด 1์ ์ถ๋ ฅํด์ค์๋ค.
if min >= 100000001:
print(0)
else:
print(min)
min๊ฐ์ด ์ด๊ธฐํ๊ฐ ๊ทธ๋๋ก ๋์๋ฒ๋ฆฐ๋ค๋ฉด S์กฐ๊ฑด์ ์์ ๋ง์กฑ์ํค์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก 0์ ์ถ๋ ฅํฉ์๋ค.
from collections import deque
import sys
input = sys.stdin.readline
N,S = map(int,input().split())
lst = deque(list(map(int,input().split())))
quene = deque([lst[0]])
sum_list = sum(lst)
boolean = False
for values in lst:
if values >= S:
boolean = True
if boolean == True:
print(1)
else:
cum_sum = lst[0]
lst.popleft()
min = 100000001
while True:
try:
if cum_sum < S:
tmp1 = lst.popleft()
cum_sum += tmp1
quene.append(tmp1)
else:
if len(quene) < min:
min = len(quene)
tmp2 = quene.popleft()
cum_sum -= tmp2
except:
break
if min >= 100000001:
print(0)
else:
print(min)