ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿ” ํˆฌํฌ์ธํ„ฐ(Two Pointers)

๋ฆฌ์ŠคํŠธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ start point์™€ end point์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

์ถœ์ฒ˜ : https://www.youtube.com/watch?v=rI8NRQsAS_s

 

๐Ÿ” ๊ตฌ๊ฐ„ ํ•ฉ(Prefix Sum)

โ—พ  ๋ถ€๋ถ„ ํ•ฉ : 0~k ๊นŒ์ง€์˜ ํ•ฉ
โ—พ  ๊ตฌ๊ฐ„ ํ•ฉ : i~j ๊นŒ์ง€์˜ ํ•ฉ

์ถœ์ฒ˜ : https://www.youtube.com/watch?v=rI8NRQsAS_s

N = 5
lst = [10, 20, 30, 40, 50]

# Prefix Sum ๋ฐฐ์—ด ๊ณ„์‚ฐ
tmp = 0
prefix_sum = [0]
for num in lst:
	tmp += num
    prefix_sum.append(tmp)
    
# ๊ตฌ๊ฐ„ ํ•ฉ ๊ณ„์‚ฐ
left = 3
right = 4
print(prefix_sum[right] - prefix_sum[left-1])

 


boj 2003 ์ฝ”๋“œ

def sol(N, M, a):
    s, e = 0, 0
    subsum = a[0]
    cnt = 0
    while True:
        if subsum < M:  # ์ž‘์œผ๋ฉด end point +1
            e += 1
            if e >= N:  # ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์ฃผ์˜
                break
            subsum += a[e]
        elif subsum == M:  # ๊ฐ™์œผ๋ฉด cnt +1
            cnt += 1
            subsum -= a[s]
            s += 1
        else:  # ํฌ๋ฉด start point +1
            subsum -= a[s]
            s += 1
    return cnt


N, M = map(int, input().split())
a = list(map(int, input().split()))
print(sol(N, M, a))

 

๋Œ“๊ธ€