우노
[Two Pointers] 백준 2003번 “수들의 합 2” Python 풀이 본문
문제 링크
풀이
- 투 포인터 알고리즘을 사용해 해결할 수 있습니다.
- 구간의 시작 idx와 끝 idx를 0과 1로 초기화합니다.
- 구간의 합을 계산합니다.
- 구간의 합이 목푯값보다 작다면, 끝 idx를 오른쪽으로 한 칸 이동합니다.
- 구간의 합이 목푯값보다 크다면, 시작 idx를 오른쪽으로 한 칸 이동합니다.
- 구간의 합이 목푯값과 같다면, 경우의 수를 증가시키고, 끝 idx를 오른쪽으로 한 칸 이동합니다.
- 참고로, 1개의 수가 m이 되는 경우도 생각해야합니다.
코드
import sys
n, m = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
# 구간 초기화
start, end = 0, 1
# m이 되는 경우의 수
count = 0
while (start <= end and end <= n):
# 구간의 합 계산
total = sum(arr[start:end])
# 구간의 합이 목푯값보다 작다면
if (total < m):
# 끝 idx를 오른쪽으로 한 칸 이동
end += 1
# 구간의 합이 목푯값보다 크다면
elif (total > m):
# 시작 idx를 오른쪽으로 한 칸 이동
start += 1
# 구간의 합이 목푯값과 같다면
else:
# 경우의 수 증가
count += 1
# 끝 idx를 오른쪽으로 한 칸 이동
end += 1
print(count)
'Algorithm > Two Pointers' 카테고리의 다른 글
[Two Pointers] 백준 2230번 “수 고르기” Python 풀이 (0) | 2022.12.11 |
---|---|
[Two Pointers] 프로그래머스 “구명보트” Python 풀이 (0) | 2022.11.28 |
[Two Pointers] 백준 14719번 “빗물” Python 풀이 (0) | 2022.10.23 |
Comments