[Algorithm] 백준 2003번 (파이썬) : 수들의 합 2

Hyuk·2022년 6월 9일
0

https://www.acmicpc.net/problem/2003

풀이과정

먼저, n개의 숫자로 이루어진 수열을 리스트(list)로 받은 후, 각 리스트의 인덱스로 접근하여 문제를 풀었다.

이때, i번째 수부터 j번째 수까지의 합(이하 sum) 접근하기 위해 left와 right라는 2가지의 변수를 사용했고, 이는 리스트의 인덱스로 사용된다.
참고로 이렇게 시작점과 끝점을 통한 문제를 투포인터 문제라고 한다.

1. sum이 m보다 크다면
sum에서 시작점인 a[left]를 빼주고, left를 1증가시켜 준다.


2. sum이 m이 같다면
sum에서 시작점인 a[left]를 빼주고, left를 1증가시켜 준다.
cnt도 1증가 시켜준다.


3. sum이 m보다 작다면
sum에 끝점인 a[right]를 더해주고, right를 1증가시켜 준다.
이때 right가 n과 같다진다면 반복문을 탈출시켜 준다.

코드

n, m = map(int, input().split())
a = list(map(int, input().split()))

sum = a[0]
left = 0
right = 1
cnt = 0

while True:
    if sum < m:
        if right < n:
            sum += a[right]
            right += 1
        else:
            break
    elif sum == m:
        cnt += 1
        sum -= a[left]
        left += 1
    else:
        sum -= a[left]
        left += 1

print(cnt)
profile
프론트엔드 개발자

0개의 댓글