자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이
[탐색][시뮬레이션] - 수들의 합(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 해주어 진행한다.