์‹ค๋ฒ„2 : two pointer ๋ฌธ์ œ์ด๋‹ค.

ํ’€์ด

  • ํˆฌํฌ์ธํ„ฐ๋Š” i์ด์ƒ j๋ฏธ๋งŒ์œผ๋กœ ์ง ๋‹ค.
  • ๊ฐ™์„ ๊ฒฝ์šฐ๋Š” i๋ฅผ ๋Š˜๋ ค์„œ ํŒŒ์•…ํ•œ๋‹ค. ์ฆ‰ ์™ผ์ชฝ์ด ๋” ๋งŽ์ด ๋”ฐ๋ผ์˜ค๋Š” ๊ตฌ์กฐ
  • ์ผ๋‹จ ์™ผ์ชฝ์ด ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉด ์ตœ๋Œ€ํ•œ ๋ฐฐ๋ คํ•ด์ฃผ๋Š” ๋Š๋‚Œ
  • ๊ทผ๋ฐ ๋ชป๊ฐ€, ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์˜ค๋ฅธ์ชฝ์ด ๊ธฐ์ค€์ด ๋˜์–ด์„œ ํŒ๋‹จ
  • ์–ด์ฐจํ”ผ i, j๊ฐ€ ๊ฐ™์•„์ง„๋‹ค๋ฉด sum ์ด 0์ด ๋˜์–ด์„œ j๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
  • ๋๊นŒ์ง€ j๊ฐ€ ๊ฐ”๋Š”๋ฐ, ๊ฐ’์ด M๋ณด๋‹ค ํฌ๋ฉด i๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ํ›„๋ณด๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋๊นŒ์ง€ ๊ฐ”๋Š”๋ฐ i์ด์ƒ j๋ฏธ๋งŒ์˜ ๊ฐ’์ด M๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋”์ด์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์œผ๋‹ˆ ์ข…๋ฃŒํ•œ๋‹ค.

i์ด์ƒ j๋ฏธ๋งŒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ๋ฐ, ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ๋‹ค์–‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์†์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ผˆ๋‹ค.

์ง€๊ธˆ ๊ฐ™์€ ๊ฒฝ์šฐ ํŒŒ์•…ํ•ด๋ณผ ๋งŒํ•œ ๊ฒƒ์ด, ๊ฒฐ๊ตญ ๋งˆ์ง€๋ง‰์— ๋„์ฐฉํ–ˆ์„ ๋•Œ, ๊ฐ’์ด ํฐ ๊ฒฝ์šฐ, ๊ฐ™์€ ๊ฒฝ์šฐ, ์ž‘์€ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ํŒ๋‹จํ•ด๋ณด๋ฉด ๋œ๋‹ค.

Code

import sys
 
input = sys.stdin.readline
 
n, m = map(int, input().split())
a = list(map(int, input().split()))
i, j, ans, bound = 0, 0, 0, 0
 
while True:  # i์ด์ƒ j๋ฏธ๋งŒ์˜ bound๋ฅผ ํ™•์ธํ•  ๊ฒƒ์ž„
    if bound == m:  # ๋จผ์ € ์ง€๊ธˆ ๊ฐ’์ด ์ •๋‹ต์ธ์ง€ ํ™•์ธ
        ans += 1
 
    if bound >= m:
        bound -= a[i]
        i += 1
    elif j == n:  # ํŠน์ • i๋ถ€ํ„ฐ j๋ฏธ๋งŒ๊ฐ’๊นŒ์ง€ ๋ดค๋Š”๋ฐ, j๊ฐ€ N์ด์•ผ. ์ฆ‰ ๋๊นŒ์ง€ ๊ฐ„๊ฑฐ์ง€
        break  # ๊ทผ๋ฐ ๊ฐ’์ด ์ด๋ฏธ M๋ณด๋‹ค ์ž‘์•„, ๊ทธ๋Ÿผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด i๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ ๋ฐ–์—. ๊ทผ๋ฐ ๊ทธ๊ฑด ๋ฌด์กฐ๊ฑด ์ž‘์ง€
    else:
        bound += a[j]
        j += 1
 
print(ans)

Reference