수들의 합 2

LeeKyoungChang·2022년 4월 10일
0

Algorithm

목록 보기
98/203
post-thumbnail

📚 2003 - 수들의 합 2

수들의 합 2

 

이해

시간 제한이 0.5초, 그러므로 단순하게 반복문을 사용하면 안되고, 투 포인터를 사용해야 한다.

설명 잘되어 있는 곳 → 투 포인터

  • 현재 위치 값이 m보다 작다면 end 증가
  • 현재 위치 값이 m보다 크거나 같다면 start 증가

 

소스

import sys

read = sys.stdin.readline

n, m = map(int, read().split())
arr = list(map(int, read().split()))

arr = arr + [0] * (10001 - len(arr))


start = 0
end = 0
partition = 0

result = 0

# end <= n인 이유 (원래 마지막 인덱스가 n - 1이다.)
# end가 마지막 인덱스에 도착하고 다음으로 넘어갈 때, 더이상 갈곳이 없어
# start를 돌려줘야 한다.


while end <= n:
    # 현재 원하는 m보다 작을 경우, end를 증가
    # 햔제 원하는 m과 같거나 클 경우, start를 증가
    if partition < m:
        partition += arr[end]
        end += 1
    elif partition >= m:
        partition -= arr[start]
        start += 1

    # 도착했다면 횟수를 증가한다.
    if partition == m:
        result += 1

print(result)

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글