Coding Cantabile

[BOJ] #2003_수들의 합2(Python3, 파이썬) 본문

Coding Test/BOJ

[BOJ] #2003_수들의 합2(Python3, 파이썬)

Gracekim 2023. 5. 17. 15:36

 

본 게시글은 백준 저지 알고리즘 문제를 '파이썬, Python3' 언어로 풀이한 내용을 주관적으로 정리하였으며, 내용과 관련된 코드리뷰 및 피드백 환영합니다.

티어

Silver IV

문제 출처

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


풀이

import sys 
input = sys.stdin.readline

N, M = map(int, input().split())
nums = list(map(int, input().split()))

left, right = 0, 1
cnt = 0
while right <= N and left <= right:
    sum_nums = nums[left:right] # 슬라이싱으로 구역나누기
    total = sum(sum_nums)
    if total == M:
        cnt += 1 # 경우의수 추가
        right += 1
    elif total < M:
        right += 1
    else:
        left += 1

print(cnt)

 

먼저 슬라이싱을 구역이라고 생각하고, 두 개의 포인터를 경우에 따라 움직인다고 생각하면 된다. 
왼쪽 포인터를 left, 오른쪽 포인터를 right로 지정하여 구역마다 합을 구해주고, total값이 M과 동일할 때 카운트를 해주면 된다.

이때 total이 M보다 작다면 right포인터를, total이 M보다 크다면 left포인터를 옮겨주었다.