์๋ค์ ํฉ
๐ ๋ฌธ์
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์ ๋์ง ์๋ ์์ฐ์์ด๋ค.
โฃ ์ถ๋ ฅ์ค๋ช
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
โฃ ์ ๋ ฅ์์
8 3 1 2 1 3 1 1 1 2
โฃ ์ถ๋ ฅ์์
5
๐ง ํ์ด
ํ์ด (์๊ฐ ์ด๊ณผ)
# ์
๋ ฅ: ์ฒซ์งธ ์ค - N, M, ๋์งธ ์ค - ์์ด ๋์ด
# ์ถ๋ ฅ: ํฉ์ด M์ด ๋๋ ๊ฒฝ์ฐ์ ์ ์ถ๋ ฅ
n, m = map(int, input().split())
list_n = list(map(int, input().split()))
a = 0
for i in range(n):
for j in range(i+1, n+1):
if sum(list_n[i:j]) == m:
a += 1
print(a)
๋ค๋ฅธ ์ฌ๋ ํ์ด
# ์ฐ์์ ์ธ ๋ถ๋ถ ์์ด์ ํฉ์ด m๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ถ๋ ฅ
# ํฌ์ธํฐ ๊ฐ๊ฐ ํ ๋น lt, rt
n, m = map(int, input().split())
a = list(map(int, input().split()))
lt = 0 # ํฌ์ธํฐ lt ํ ๋น
rt = 1 # ํฌ์ธํฐ rt ํ ๋น
tot = a[0] # tot ์ด๊ธฐ๊ฐ: a[0]
cnt = 0 # ๊ฐ์ ์ธ๊ธฐ ์ํ cnt ํ ๋น
while True: # break ๋๊ธฐ ์ ๊น์ง ๋ฐ๋ณต
if tot < m: # ํฉ์ด m๋ณด๋ค ์์ ๊ฒฝ์ฐ
if rt < n: # rt๊ฐ n๋ณด๋ค ์์ ๊ฒฝ์ฐ
tot += a[rt] # tot์ a[rt] ๊ฐ ๋ํด์ค
rt += 1 # rt ํฌ์ธํฐ 1๋งํผ ์ฆ๊ฐ
else: # rt๊ฐ n๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด
break # ๋ฐ๋ณต๋ฌธ ์ข
๋ฃ
elif tot == m: # ๋ง์ฝ ํฉ์ด m๊ณผ ๊ฐ์ผ๋ฉด
cnt += 1 # cnt 1 ์ฆ๊ฐ
tot -= a[lt] # tot์์ a[lt] ๊ฐ ๋นผ์ค
lt += 1 # lt 1 ์ฆ๊ฐ
else: # ๋ง์ฝ ํฉ์ด m๋ณด๋ค ํฌ๋ฉด
tot -= a[lt] # cnt ์ฆ๊ฐ ์์ด a[lt] ๊ฐ ๋นผ์ค
lt += 1 # lt 1 ์ฆ๊ฐ
print(cnt) # cnt ์ถ๋ ฅ
'๐งฉ Algorithm > ๐จ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ] ์ฌ๊ณผ๋๋ฌด(๋ค์ด์๋ชฌ๋) (0) | 2022.07.26 |
---|---|
[ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ] ๊ฒฉ์ํ ์ต๋ํฉ (0) | 2022.07.25 |
[ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ] ๋ ๋ฆฌ์คํธ ํฉ์น๊ธฐ (0) | 2022.07.24 |
[ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ] ์นด๋ ์ญ๋ฐฐ์น(์ ์ฌ ๊ธฐ์ถ) (0) | 2022.07.24 |
[ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ] ์ซ์๋ง ์ถ์ถ (0) | 2022.07.24 |