1์ผ 1์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ ์ค ์ค๋์ ์๊ณ ๋ฆฌ์ฆ์ ํฌ ํฌ์ธํฐ๋ค. ์ผ๋จ ๊ณต๋ถ๋ ํ ์๊ณ ๋ฆฌ์ฆ๋ค์ฒ๋ผ ๊ฐ๋ ์์ฒด๋ ํฌ๊ฒ ์ด๋ ต์ง ์์๋ค. ํญ์ ์์ฉ์ ๋ชปํ๋ ๋ด๊ฐ ๋ฌธ์ ์ผ ๋ฟ,,^^ ๊ทผ๋ฐ ์ด๋ถํ์์ด๋ ๋น์ทํ ๊ฑฐ ๊ฐ๋ค๊ณ ๋๊ปด์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง๋ ์ข ๋ ์ฐพ์๋ด์ผ๊ฒ ๋ค.
๋ฌธ์
์ ์ถ๋ ฅ ์์
์์ด๋์ด ํ๋ฆ
1) ํ์ํ ๋ณ์ ์์ฑ ๋ฐ ์ด๊ธฐํ
โฝ start, end = 0, 0
โฝ total = 0
โฝ cnt = 0
2) total๊ณผ ์ฃผ์ด์ง M ๊ฐ ๋น๊ต
โฝ total == M → cnt += 1, start += 1
โฝ total < M → end += 1
โฝ total > M → start += 1
โฝ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ ๋๊น์ง ์์ ๊ณผ์ ์ ๋ฐ๋ณต
์ ์ฒด ์ฝ๋
cnt = 0
n, m = map(int, input().split())
a = list(map(int, input().split()))
total = 0
start, end = 0, 0
while start <= end and end <= len(a):
total = sum(a[start:end])
if total > m:
start += 1
elif total < m:
end += 1
else:
cnt += 1
start += 1
print(cnt)
์ฝ๋๋ฅผ ์ฒ์ ์งฐ์ ๋๋ total == M์ผ ๋ cnt ๊ฐ๋ง 1์ ๋ํด์ฃผ๊ณ ํฌ์ธํฐ๋ฅผ ์ด๋์ํค์ง ์์๋๋ฐ ์ ์ถ๋ ฅ ์์๋๋ก ๊ฐ์ด ์ ๋์์ start += 1์ ์ถ๊ฐํด์คฌ๋ค. end += 1์ผ ๋๋ ์ด๋ป๊ฒ ๋๋ ์ถ์ด์ ๋ฐ๊ฟ ์ ์ถํด๋ดค๋๋ ์ฑ์ ํต๊ณผํ ๊ฒ์ ๋ณด๋ฉด total ๊ฐ์ ๋ฐ๋ผ ํฌ์ธํฐ๊ฐ ์์ง์ผ ๊ฑฐ๋๊น totall == M์ธ ๊ฒฝ์ฐ์์๋ ์ด๋ค ํฌ์ธํฐ๋ฅผ ์์ง์ฌ๋ ์๊ด์ด ์๋ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ
ํฌ ํฌ์ธํฐ ๊ฐ๋ ๋ณธ๋ค๊ณ ์ ํ๋ธ ์์ 2๊ฐ ์ฐพ์๋ดค๋๋ฐ ๋ ์์ ๋ค ์ด ๋ฌธ์ ๋ก ๊ฐ๋ ์ค๋ช ์ ํ๊ณ ๊ทธ ์ค์ ๋๋๋น ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ์ฉ์ผ๋ก ๊ฐ์ ธ์๋ดค๋ค.
# ์์์์๋ n, m, data ๊ฐ์ ๊ณ ์ ํ์
จ๋๋ฐ ์ด ๋ถ๋ถ๋ง ์์
n, m = map(int, input().split())
data = list(map(int, input().split()))
result = 0
summary = 0
end = 0
# start๋ฅผ ์ฐจ๋ก๋๋ก ์ฆ๊ฐ์ํค๋ฉฐ ๋ฐ๋ณต
for start in range(n):
# end๋ฅผ ๊ฐ๋ฅํ๋งํผ ์ด๋์ํค๊ธฐ
while summary < m and end < n:
summary += data[end]
end += 1
# ๋ถ๋ถ ํฉ์ด m์ผ ๋ ์นด์ดํธ ์ฆ๊ฐ
if summary == m:
result += 1
summary -= data[start]
print(result)
start ๋ณ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ for๋ฌธ์ ์ด์ฉํ๋ค๋ ๊ฒ๊ณผ ๋ถ๋ถ ํฉ์์ data[start]๋ฅผ ๋นผ๋ ๋ฐฉ์์ด ์ธ์ ๊น์๋ค.
'Problem Solving > BOJ & Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 11256๋ฒ: Jelly Bean (0) | 2022.02.03 |
---|---|
[BOJ] 5177๋ฒ: Format Error! (0) | 2022.02.03 |
[BOJ] 1806๋ฒ: Subsequence (๋ถ๋ถํฉ) (0) | 2021.07.13 |
[BOJ] 1991๋ฒ: ํธ๋ฆฌ ์ํ (0) | 2021.07.07 |
[BOJ] 1260๋ฒ: DFS์ BFS (2) | 2021.06.27 |