1. ๋ฌธ์ ์ค๋ช
๋ฌธ์ URL: https://www.acmicpc.net/problem/2015
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์์ด์์ ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ์ด ํน์ ๊ฐ K ๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค. ์์ด์ ๊ฐ ์์๋ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ฐ์๋ ๋ถ๋ถ ์์ด์ ์ ํํ์ ๋ ๊ทธ ํฉ์ด ์ ํํ K ๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ํฉ์ ํ์ฉํ์ฌ ๊ฐ ๋ถ๋ถ ์์ด์ ํฉ์ ๊ณ์ฐํ๊ณ , ๋์
๋๋ฆฌ๋ฅผ ์ด์ฉํด ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
2. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
N, K = map(int, input().split()) # ์์ด์ ๊ธธ์ด N๊ณผ ๋ชฉํ ํฉ K๋ฅผ ์
๋ ฅ๋ฐ์
A = list(map(int, input().split())) # ์์ด A ์
๋ ฅ๋ฐ๊ธฐ
# ๋์ ํฉ ๋ฐฐ์ด dp๋ฅผ ์์ฑ. dp[i]๋ A์ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ i๋ฒ์งธ ์์๊น์ง์ ํฉ
dp = [0] * (N + 1)
for i in range(N):
dp[i+1] = A[i] + dp[i] # dp[i+1]์ A[i]๋ฅผ ๋ํด ๋์ ํฉ์ ์ ์ฅ
ans = 0 # ํฉ์ด K๊ฐ ๋๋ ๋ถ๋ถ ์์ด์ ๊ฐ์๋ฅผ ์ ์ฅํ ๋ณ์
cnt = {} # ๊ฐ ๋์ ํฉ์ ๋น๋๋ฅผ ์ ์ฅํ ๋์
๋๋ฆฌ
# ๋์ ํฉ์ ์ํํ๋ฉฐ ํฉ์ด K๊ฐ ๋๋ ๋ถ๋ถ ์์ด์ ๊ฐ์๋ฅผ ๊ณ์ฐ
for i in range(1, N+1):
if dp[i] == K:
ans += 1 # dp[i] ์์ฒด๊ฐ K์ผ ๋, ๋ถ๋ถ ์์ด์ด A์ ์ฒ์๋ถํฐ i๊น์ง์ ๊ตฌ๊ฐ์ธ ๊ฒฝ์ฐ
# ํ์ฌ ๋์ ํฉ dp[i]์์ K๋ฅผ ๋บ ๊ฐ์ด ์ด์ ์ ๋ฑ์ฅํ ์ ์ด ์๋ค๋ฉด,
# ๊ทธ ๊ฒฝ์ฐ์ ์๋งํผ ๋ถ๋ถ ์์ด์ ํฉ์ด K๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํจ
if dp[i] - K in cnt:
ans += cnt[dp[i] - K]
# ํ์ฌ ๋์ ํฉ dp[i]์ ๋น๋๋ฅผ ๋์
๋๋ฆฌ์ ์ถ๊ฐํ๊ฑฐ๋ ์ฆ๊ฐ์ํด
if dp[i] in cnt:
cnt[dp[i]] += 1
else:
cnt[dp[i]] = 1
# ์ต์ข
์ ์ผ๋ก ํฉ์ด K๊ฐ ๋๋ ๋ถ๋ถ ์์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅ
print(ans)
3. ์ฝ๋ ์ค๋ช
1) ์์ (Start)
- ํ๋ก๊ทธ๋จ์ด ์์๋ฉ๋๋ค.
2) ์ ๋ ฅ ๋ฐ๊ธฐ
- ์์ด์ ๊ธธ์ด N๊ณผ ๋ชฉํ ํฉ K๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
- ์์ด A๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
3) ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ
- ๋์ ํฉ ๋ฐฐ์ด dp๋ฅผ ๊ธธ์ด N+1๋ก ์ด๊ธฐํํฉ๋๋ค. ๋ชจ๋ ์์๋ 0์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
- ๋ณ์ ans(๋ถ๋ถ ์์ด์ ํฉ์ด K์ธ ๊ฒฝ์ฐ์ ์)์ cnt(๋์ ํฉ์ ๋น๋ ๋์ ๋๋ฆฌ)๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
4) ๋์ ํฉ ๊ณ์ฐ
- ์์ด A์ ๊ฐ ์์์ ๋ํด, dp ๋ฐฐ์ด์ ์ ๋ฐ์ดํธํ์ฌ ๋์ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
- dp[i+1] = A[i] + dp[i]๋ก ํ์ฌ ์์น๊น์ง์ ๋์ ํฉ์ ์ ์ฅํฉ๋๋ค.
5) ๋ถ๋ถ ์์ด ํฉ ๊ณ์ฐ
- i๋ฅผ 1๋ถํฐ N๊น์ง ๋ฐ๋ณตํ์ฌ:
- ํ์ฌ ๋์ ํฉ dp[i]๊ฐ K์ ๊ฐ๋ค๋ฉด, ans๋ฅผ 1 ์ฆ๊ฐ์ํต๋๋ค.
- dp[i] - K๊ฐ cnt์ ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๊ฐ์ ans์ ๋ํด์ค๋๋ค. ์ด๋ dp[i] - K๋ก ๋๋๋ ๋ถ๋ถ ์์ด๋ค์ด ๋ชจ๋ K๊ฐ ๋๋ ๋ถ๋ถ ์์ด์์ ์๋ฏธํฉ๋๋ค.
- ํ์ฌ ๋์ ํฉ dp[i]์ ๋น๋๋ฅผ cnt์ ์ถ๊ฐํ๊ฑฐ๋, ์ด๋ฏธ ์๋ค๋ฉด ๊ทธ ๋น๋๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
6) ๊ฒฐ๊ณผ ์ถ๋ ฅ
- ๊ณ์ฐ๋ ans๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ด๋ ํฉ์ด K๊ฐ ๋๋ ๋ถ๋ถ ์์ด์ ๊ฐ์์ ๋๋ค.
4. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python_Easy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2178[๋ฏธ๋ก ํ์] (0) | 2024.08.18 |
---|---|
๋ฐฑ์ค 1343[ํด๋ฆฌ์ค๋ฏธ๋ ธ] (0) | 2024.08.14 |
๋ฐฑ์ค 2417[์ ์ ์ ๊ณฑ๊ทผ] (0) | 2024.08.09 |
๋ฐฑ์ค 1748[์ ์ด์ด ์ฐ๊ธฐ 1] (0) | 2024.08.09 |