본문 바로가기

Algorithm/BOJ

[BOJ] 1806. 부분합

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

 

1806번: 부분합

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

www.acmicpc.net

 

 

1. 해결방법

투 포인터를 이용한다. 
주의해야될 점은 left, right를 0, 0을 초기 값을 설정해야한다.
0, 1로 설정했더니 첫 인덱스 값이 15가 넘어버리는 테스트 케이스에서 실패를 한 것 같았다.

 

 

2. 정답코드

import sys
input = sys.stdin.readline

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

left, right = 0, 0
answer = sys.maxsize
total = nums[0]

while True:
    if total >= S:
        answer = min(answer, right - left + 1)
        total -= nums[left]
        left += 1
    else:
        right += 1
        if right == N:
            break
        total += nums[right]


print(0 if answer == sys.maxsize else answer)

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 15686. 치킨 배달  (0) 2022.10.03
[BOJ] 1463. 1로 나누기  (0) 2022.09.28
[BOJ] 4485. 녹색 옷 입은 애가 젤다지?  (0) 2022.09.09
[BOJ] 1504. 특정한 최단 경로  (0) 2022.09.09
[BOJ] 1916. 최소비용 구하기 성공  (0) 2022.09.09