https://www.acmicpc.net/problem/2003
1. 해결방법
"""
1. 아이디어
- 투 포인터를 활용
- 왼쪽 첫 번째 두 번째를 target으로 잡고 합을 계산
- 합이 M보다 작다면 두 번째 타겟의 위치를 +1, 반대면 첫 번째 타겟의 위치를 -1, 합이 M 이라면 count + 1
- 첫 번째 타겟이 N보다 같거나 커지면 종료
2. 시간 복잡도
- O(N)
"""
2. 정답코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
nums = list(map(int, input().split()))
left, right = 0, 1
count = 0
add_num = 0
while right <= N and left <= right:
add_num = sum(nums[left:right])
if add_num == M:
count += 1
right += 1
elif add_num < M:
right += 1
else:
left += 1
print(count)
바보 같이 while문에서 조건이 헷갈렸다. 두 개의 포인터를 사용해야하는데 종료 조건을 만족하지 못해서 계속 무한 루프에 빠진 문제였다...
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 1920. 수 찾기 (0) | 2022.09.03 |
---|---|
[BOJ] 2467. 용액 (0) | 2022.09.02 |
[BOJ] 3273. 두 수의 합 (0) | 2022.09.01 |
[BOJ] 2559. 수열 (0) | 2022.09.01 |
[BOJ] 14719. 빗물 (0) | 2022.08.05 |