문제
주어진 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 해주어 진행한다.
'자료구조와 알고리즘 > 개인적인 코딩테스트 관련 풀이' 카테고리의 다른 글
[탐색][시뮬레이션] - 사과나무(2차원 List) (0) | 2022.07.06 |
---|---|
[탐색][시뮬레이션] - 격자판 최대합(2차원 List) (0) | 2022.07.06 |
[탐색][시뮬레이션] - 카드 역배치(List) (0) | 2022.07.01 |
[탐색][시뮬레이션] - 숫자만 추출(String) (0) | 2022.07.01 |
[탐색][시뮬레이션] - 회문 문자열 검사(String) (0) | 2022.07.01 |