2022. 1. 7. 00:23ใ๐ฑ Algorithm/Else
https://www.acmicpc.net/problem/2003
์ฌ๊ณ ๊ณผ์
1. M ์ด๋ ๋งค์นญ๋ ๋๊น์ง ์ฐจ๋ก๋ก ๋ํ๊ฑฐ๋
2. M ๋ณด๋ค ์ปค์ง๋ฉด break
3. ์ด๋ป๊ฒ M ์ ๋ง์ถ๋๋๋ ๊ด์ฌ์๋ค. ์ฐ์๋ ์ซ์์ ๋ช๊ฐ์ง ๊ฒฝ์ฐ๊ฐ M ์ ๋ง์ถ๋์ง๊ฐ ์ค์.
์ ๋ต ์ฝ๋
from sys import stdin
N, M = map(int, stdin.readline().split())
arr = list(map(int, stdin.readline().split()))
count = 0
left, right = 0, 1
if arr[0] == M:
count += 1
while right < len(arr):
total = sum(arr[left: right + 1])
if total < M:
right += 1
elif total > M:
left += 1
else:
count += 1
left += 1
right += 1
print(count)
์ฒ์ ํ์ด (์ค๋ต)
์ด์ค for ๋ฌธ์ผ๋ก ์ ๊ทผํ๋ค. ํ๋ฉด์๋ ๋น์ฐํ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ผ ์์ํ๋ค. ๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ์ผ๋ก ์ธํด ์ฌ์ค์ ์๊ฐ๋ณต์ก๋ O(N^3)...
๋ฐ๋ณต๋ฌธ์ ํ๋ฒ๋ง ๋๋ฆฌ๋ ๋๋ฒ ๋๋ฆฐ ๊ฒ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ด๋ ๊ฒ, ๊ทธ๊ฒ์ด ์ด๋ฒ ๋ฌธ์ (two pointer ๋ผ๊ณ ํ๋๋ผ)๋ฅผ ํธ๋ ํต์ฌ์ด๋ค.
๋๋ฒ ๋๋ฆฐ ๊ฒ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ด๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
๋๋ฒ์งธ for ๋ฌธ์ ์ดํด๋ณด๋ฉด, j ์ธ๋ฑ์ค์ ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉด์ ๋ฐ๋ณต๋ฌธ์ ์งํํ๋ค. j ์ธ๋ฑ์ค๋ i ์ดํ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ธ๋ค.
๊ทธ๋ผ j ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ์ฆ๊ฐ์ํฌ์๋ง ์๋ค๋ฉด, ๋๋ฒ์งธ for ๋ฌธ์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค.
from sys import stdin
N, M = map(int, stdin.readline().split())
arr = list(map(int, stdin.readline().split()))
count = 0
for i in range(N):
for j in range(i + 1, N + 1):
temp = sum(arr[i:j])
if temp == M:
count += 1
break
elif temp > M:
break
print(count)
๋ ๋น ๋ฅธ ํ์ด
๋ด๊ฐ ํผ ์ ๋ต์ฝ๋๋ ๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๊ฐ O(N^2) ๊ฐ ๋์ด ์๋๊ฐ ๋๋ฆฌ๋ค.
์๋ ์ฝ๋๋ ๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ์ฐ์๋ ์์์ ํฉ์ ๊ตฌํ์ฌ, ํ์ด ์๋๋ฅผ ์ค์ธ ์ผ์ด์ค๋ค.
while True ๋ฌธ์ ํ์ถ ์กฐ๊ฑด์ผ๋ก๋ right ๋ณ์๊ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ณด๋ค ์ปค์ง๋ ์๊ฐ์ผ๋ก ์ ํ๋ค. ๊ทธ ์ ๊น์ง๋ ๊ณ์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ๋ ๋ณ์(left, right)์ ํฉ๊ณ(total)์ ์กฐ์ ํ๋ค. ํฉ๊ณ๋ฅผ ๊ตฌํ ๋ ์ฌ๋ผ์ด์ฑ์ ์ฌ์ฉํ์ง ์๊ณ , ๊ณง๋ฐ๋ก ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ฏ๋ก ์๊ฐ๋ณต์ก๋์์ ์ฐ์๋ฅผ ๊ฐ๋๋ค( = ๋ ๋น ๋ฅด๋ค)
N, M = map(int, input().split())
A = [ int(x) for x in input().split() ]
left = 0
right = 0
total = 0
ans = 0
while True:
if total >= M:
total -= A[left]
left += 1
elif right == N:
break
else:
total += A[right]
right += 1
if total == M:
ans += 1
print(ans)
๋ฐฐ์ด ๊ฒ
- two pointer ๋ผ๋ ์ ๊ทผ๋ฒ
- slicing์ ์๊ฐ๋ณต์ก๋ O(N)
'๐ฑ Algorithm > Else' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ ํ์ด์ฌ (0) | 2022.07.04 |
---|---|
๋ฐฑ์ค 16953 ํ์ด์ฌ (0) | 2022.01.25 |
๋ฐฑ์ค 10830 ํ์ด์ฌ (0) | 2021.12.26 |
ํ๋ก๊ทธ๋๋จธ์ค [lv1] ๋ก๋์์ต๊ณ ์์์์ต์ ์์ ํ์ด์ฌ (0) | 2021.05.18 |
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ๋ก๋ฑ ํ์ด์ฌ (0) | 2021.05.16 |