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

Jewon Joel Park·2022년 5월 30일
0

문제 링크


문제 설명

N개의 수로 된 수열이 주어질 때, 연속된 수들의 합이 M이 되는 경우의 수를 구하는 코드 작성


풀이 코드

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

start = 0
end = 1

count = 0
while start <= end <= n:
    s = sum(arr[start:end])
    if s < m:
        end += 1
    elif s == m:
        count += 1
        end += 1
    else:
        start += 1

print(count)

코드 설명

  1. N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000) 이라는 조건으로 인해 완전 탐색은 불가능, 따라서 투포인터로 해결
  2. 인덱스 슬라이싱을 위한 start, end 변수 및 최종 결과(경우의 수)를 저장하기 위한 변수 count 설정
  3. while문으로 인덱스가 n을 벗어나지 않게 하기 위한 반복 조건 설정
  4. sum()함수를 사용하여 슬라이싱한 배열 내 값들의 합을 매 반복 때마다 m값과 비교
  5. 더한 값이 m보다 작을 경우 인덱스범위 확장(end += 1)
  6. 같을 경우 카운트 증가 및 인덱스범위 확장(다음 탐색)
  7. 더한 값이 m보다 클 경우 인덱스범위 축소(start += 1)
profile
10년을 돌고 돌아 마침내 제자리를 찾은 문과 출신 Python 개발자의 인생기록장

0개의 댓글