오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 00:00
관리 메뉴

우노

[Two Pointers] 백준 2003번 “수들의 합 2” Python 풀이 본문

Algorithm/Two Pointers

[Two Pointers] 백준 2003번 “수들의 합 2” Python 풀이

운호(Noah) 2022. 12. 9. 03:32

문제 링크

풀이

  • 투 포인터 알고리즘을 사용해 해결할 수 있습니다.
  • 구간의 시작 idx와 끝 idx를 0과 1로 초기화합니다.
  • 구간의 합을 계산합니다.
  • 구간의 합이 목푯값보다 작다면, 끝 idx를 오른쪽으로 한 칸 이동합니다.
  • 구간의 합이 목푯값보다 크다면, 시작 idx를 오른쪽으로 한 칸 이동합니다.
  • 구간의 합이 목푯값과 같다면, 경우의 수를 증가시키고, 끝 idx를 오른쪽으로 한 칸 이동합니다.
  • 참고로, 1개의 수가 m이 되는 경우도 생각해야합니다.

코드

import sys

n, m = map(int, sys.stdin.readline().split())

arr = list(map(int, sys.stdin.readline().split()))

# 구간 초기화
start, end = 0, 1

# m이 되는 경우의 수
count = 0

while (start <= end and end <= n):

    # 구간의 합 계산
    total = sum(arr[start:end])

    # 구간의 합이 목푯값보다 작다면
    if (total < m):
        # 끝 idx를 오른쪽으로 한 칸 이동
        end += 1

    # 구간의 합이 목푯값보다 크다면
    elif (total > m):
        # 시작 idx를 오른쪽으로 한 칸 이동
        start += 1

    # 구간의 합이 목푯값과 같다면
    else:
        # 경우의 수 증가
        count += 1
        # 끝 idx를 오른쪽으로 한 칸 이동
        end += 1

print(count)
Comments