자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[탐색][시뮬레이션] - 수들의 합(List)

얄루몬 2022. 7. 6. 18:00

문제

주어진 n개의 수들의 합이 m값이 되는 경우가 몇개인지를 출력해라

문제 풀이

import sys
#sys.stdin = open("input.txt", "r")

#수들의 합
n,m = map(int,input().split())
a = list(map(int,input().split()))
cnt = 0
left = 0
right = 1
total = a[0]

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

print(cnt)
  • list를 두 개의 2 point로 잡아서 하나씩 더해주는 과정이다.
    • 이때 범위 문제를 해결하기 위해서 m보다 right가 더 많지 않은지를 확인한 다음 작다면 다음 작업을 진행해주고 그렇지 않다면 break로 반복문을 종료시킨다.
  • m보다 작을 땐 right를 증가시켜 한 칸 더 나아가 더해준다.
  • m과 같을 땐 조건에 부합하기에 cnt를 증가시켜주고 다음 작업을 위해 left 값을 total에서 뺀 뒤 left 자체를 한 칸 옆으로 옮겨준다.
  • m보다 클 땐 left 값을 total에서 빼준 뒤 + 1 해주어 진행한다.