흰 스타렉스에서 내가 내리지

[BOJ] 1806번 부분합 본문

Problem Solving

[BOJ] 1806번 부분합

주씨. 2022. 1. 5. 13:06
728x90

https://www.acmicpc.net/problem/1806

 

1806번: 부분합

첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.

www.acmicpc.net

N, S = map(int, input().split())
data = list(map(int, input().split()))

end = 0
interval_sum = 0
answer = 1e9

for start in range(N):
    while interval_sum < S and end < N:
        interval_sum += data[end]
        end += 1
    
    if interval_sum >= S:	# 1
        answer = min(answer, end-start)


    interval_sum -= data[start]
    
print(answer if answer != 1e9 else 0)

투포인터를 이용하면 쉽게 풀리는 문제이다. 

처음에 #1번 if문을 넣지 않아 '틀렸습니다'를 받았다. 

while문에 조건이 두개이므로, 다른 조건이 일치하지 않아도 while문에서 벗어날수 있다는 걸 간과했다.

따라서 뒤에 answer값을 변경하는 문장에 if 조건문을 붙여줬어야 했다.  

'Problem Solving' 카테고리의 다른 글

[BOJ] 1655번 가운데를 말해요  (0) 2022.01.10
[BOJ] 2668번 숫자고르기  (0) 2022.01.07
[BOJ] 24040번 예쁜 케이크  (0) 2022.01.03
주어진 N의 크기에 맞는 Time Complexity는?  (0) 2022.01.02
[BOJ] 2178번 미로 탐색  (0) 2022.01.02