๋ฌธ์
N๊ฐ์ ์๋ก ๋ ์์ด A[1], A[2], …, A[N] ์ด ์๋ค. ์ด ์์ด์ i๋ฒ์งธ ์๋ถํฐ j๋ฒ์งธ ์๊น์ง์ ํฉ A[i] + A[i+1] + … + A[j-1] + A[j]๊ฐ M์ด ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ A[1], A[2], …, A[N]์ด ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ A[x]๋ 30,000์ ๋์ง ์๋ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
4 2
1 1 1 1
์์ ์ถ๋ ฅ 1
3
์์ ์ ๋ ฅ 2
10 5
1 2 3 4 2 5 3 1 1 2
์์ ์ถ๋ ฅ 2
3
๋ฌธ์ ํ์ด
import sys
n,m=map(int, sys.stdin.readline().split(' '))
numbers=list(map(int, sys.stdin.readline().split(' ')))
ans=0
end=0
cur=0
# ํฌ ํฌ์ธํฐ
for start in range(n):
# ์ผ์ข
์ ์์ ํ์ ๋ฐฉ์ -> pypy์์๋ง ํจ์ค
# cur_sum = numbers[start]
# if cur_sum == m:
# ans += 1
# for end in range(start + 1, n):
# if cur_sum >= m:
# break
# cur_sum = cur_sum + numbers[end]
# if cur_sum == m:
# ans += 1
while cur<m and end<n:
cur+=numbers[end]
end+=1
if cur==m:
ans+=1
cur-=numbers[start]
print(ans)
์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋๋ pypy์์ ํต๊ณผํ์ง๋ง python์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋๋ ์ฌ์ค์ ๊ฑฐ์ ์์ ํ์์ด๋ ๋ค๋ฆ์์๋ค.
๋ณผํ์ผ๋ก ๋์ ์ฌ ๋ณธ๊ฑฐ๋ผ ์ ์์๋ณผ ์ ์์ผ์ค์ง ๋ชจ๋ฅด๊ฒ ์ง๋งใ ใ .. start๋ฅผ 0์์ n-1๊น์ง ๋ถ์ฌํ๊ณ , end=start+1๋ก ์ด๊ธฐํํด์ค ํ์
for๋ฌธ์ ๋๋ฉด์ ์ง๊ธ๊น์ง ์ง๋์จ ๊ฐ์ ๋ชจ๋ ํฉํ cur_sum๊ฐ์ด m๋ณด๋ค ์ปค์ง ๊ฒฝ์ฐ breakํ๊ณ , m๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ans+=1ํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
start๊ฐ 0์ผ ๋ cur_sum=numbers[0]์ผ๋ก ์ด๊ธฐํ๋๊ณ , end=1๋ก ์ด๊ธฐํ๋๋ค. ๊ทธ๋ฆฌ๊ณ end๊ฐ n๋ณด๋ค ์์ ๋๊น์ง numbers[end]๋ฅผ cur_sum์ ๋ํด์ฃผ๋ฉด์ for๋ฌธ์ ๋ฐ๋ณตํ๊ฒ ๋๋๋ฐ(1+2+3+...) ๋ฐ๋ณต ๋์ค์ m๊ฐ์ธ 5๋ณด๋ค ์ปค์ง๋ฉด break๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ start ์ง์ ์์๋ถํฐ ๋ค์ ์์๋ค์ m๋ณด๋ค ์ปค์ง๊ฑฐ๋ ๊ฐ์์ง ๋๊น์ง ๋ฐ๋ณตํด์ ๋ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋งค๋ฒ ์๋ก์ด start๋ฅผ ์์ํ ๋๋ง๋ค cur_sum๊ณผ end๊ฐ์ ์๋ก ์ด๊ธฐํํด์ฃผ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์กด์ cur_sum ๊ฐ์์ numbers[start]์ ๋นผ์ฃผ๊ณ , ๋ค์ cur_sum ๊ฐ์ด m๋ณด๋ค ์๊ณ , end ๊ฐ์ด n๋ณด๋ค ์์ ๋๊น์ง cur_sum+=numbers[end]๋ฅผ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
cur_sum์ด m๊ณผ ๋์ผํ ๊ฒฝ์ฐ์ ans+=1์ ํด์ฃผ๋ฉด ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ > ์ ํ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 9935 ๐ฅ] ๋ฌธ์์ด ํญ๋ฐ (1) | 2023.08.12 |
---|---|
[๋ฐฑ์ค 2493 ๐ฅ] ํ (0) | 2023.08.03 |
[๋ฐฑ์ค 1863 ๐ฅ] ์ค์นด์ด๋ผ์ธ ์ฌ์ด ๊ฑฐ (0) | 2023.08.03 |
[๋ฐฑ์ค 1874 ๐ฅ] ์คํ ์์ด (0) | 2023.07.31 |
[๋ฐฑ์ค 1935 ๐ฅ] ํ์ ํ๊ธฐ์2 (0) | 2023.07.10 |