1. ํฌ ํฌ์ธํฐ(Two Pointers) ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฐ์ด์ ํน์ ์ฐ์๋ ๊ตฌ๊ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ๋ฆฌ์คํธ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํ ๋, ๋๊ฐ์ ์ ์ ์ด์ฉํด ์์น๋ฅผ ๊ธฐ๋กํ๋ฉด์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ
- $O(N)$
2. ์์ ๋ฌธ์
- [1,2,3,2,5]
- ํฉ์ด 5 ์ธ ๋ถ๋ถ ์ฐ์ ์์ด์ ๊ฐ์ ๊ตฌํ์์ค
- ๊ฐ ์ง์ ์์ ๊ตฌ๊ฐ์ ๋๋ ค๊ฐ๋ฉฐ ์ฐ์๋๋ ์๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ?
- ์๊ฐ ๋ณต์ก๋ : $O(n^2)$
- ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋ง์์ง๋ฉด ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆผ
- $O(N)$์ผ๋ก ํ๋ ค๋ฉด?
- ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ๊ธฐ
3. ํ์ด
- start, end ํฌ์ธํฐ๋ฅผ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก!
- ํฉ์ด 5๋ณด๋ค ์์ผ๋ฉด end ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ (ํฉ์ ๋๋ฆผ)
- ํฉ์ด 5๋ณด๋ค ํฌ๋ฉด start๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ (ํฉ์ ์ค์)
- ํฉ์ด 5๊ฐ๋๋ฉด count, start๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
#๋ฐ์ดํฐ์ ๊ฐ์ N๊ณผ ๋ถ๋ถ ์ฐ์ ์์ด์ ํฉ M์ ์
๋ ฅ ๋ฐ๊ธฐ
n, m = 5,5
data = [1,2,3,2,5]
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)
4. ์ฐธ๊ณ
https://www.youtube.com/watch?v=rI8NRQsAS_s