ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
N ํฌ๊ธฐ์ ์์ด์ด ์ฃผ์ด์ง ๋, ์์ด์ ๋ถ๋ถ ํฉ ์ค M์ ๋ง์กฑํ๋ ๊ฐ์๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด์๋ ๋ฏธ๋ฆฌ 1 ~ N๊น์ง์ ๋์ ํฉ์ ๊ณ์ฐํ ํ์ ์์, ๋ ์ง์ ์ ๋ฌ๋ฆฌํ๋ฉฐ ๋ถ๋ถํฉ์ ๊ณ์ฐํ๋ฉด ๋๋ค.
์์ ์ ๋ ฅ 1์ ๊ธฐ์ค์ผ๋ก ํฉ์ ๋์ ์ํค๋ฉด [0, 1, 2, 3, 4]์ ๊ฐ์ด ํฉ์ด ๋์ ๋๋ค. ์ด๋ฅผ ์์ ๋ ์ง์ ์ 0, 1๋ก ๋๊ณ ์กฐ๊ฑด์ ๋ฐ๋ผ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐ์์ผ ๊ฐ๋ฉฐ ํ์์ ํ๋ฉด, ์ ์ฒด ๋ถ๋ถํฉ์ ๋ํ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ ์ ์๋ค.
- start : 0, end :1
- ๋์ ํฉ[end] - ๋์ ํฉ[start] != M ์ด๋ฏ๋ก end๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
- start : 0, end : 2
- ๋์ ํฉ[end] - ๋์ ํฉ[start] == M ์ด๋ฏ๋ก ํ๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์ ์ ์๋ค.
- ์ด์ ๊ฐ์ด start์ ๋ฐ๋ผ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ถ๋ฅํ๋ฉด
- M์ ๋ง์กฑํ๋ start end๋ [[0, 2], [1, 3], [2, 4]] ์์ ์ ์ ์๋ค.
๋จ์ํ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ํ๋จํ์ฌ๋ ๋์ง๋ง, ํ์ด์ฌ์ผ๋ก๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ฝ๋
from sys import stdin
if __name__ == '__main__':
answer = 0
start, end = 0, 1
n, m = map(int, stdin.readline().split())
nums = list(map(int, stdin.readline().split()))
subtotal = [0] * (n + 1)
for i in range(1, n + 1):
subtotal[i] = subtotal[i - 1] + nums[i - 1]
while start < n and end <= n:
cur_subtotal = subtotal[end] - subtotal[start]
if cur_subtotal == m:
answer += 1
start += 1
if cur_subtotal < m:
end += 1
elif cur_subtotal > m:
start += 1
print(answer)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1644 ์์์ ์ฐ์ํฉ (0) | 2020.08.14 |
---|---|
๋ฐฑ์ค: 1860 ๋ถ๋ถํฉ (0) | 2020.08.13 |
๋ฐฑ์ค: 2225 ํฉ๋ถํด (0) | 2020.08.12 |
๋ฐฑ์ค: 3055 ํ์ถ (0) | 2020.08.11 |
๋ฐฑ์ค: 15644 ๊ตฌ์ฌ ํ์ถ 3 (0) | 2020.08.08 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ