jae_coding

[1day 1sol] 부분합 본문

알고리즘 문제/one_day_one_sol

[1day 1sol] 부분합

재코딩 2022. 9. 17. 16:35
반응형

문제

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

 

1806번: 부분합

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

www.acmicpc.net

 

구현

  • 10,000 이하의 자연수로 이루어진 길이 N짜리 수열
  • 조건
    • 1. 연속된 수들의 부분합 중 합이 S이상 되는 것
    • 2. 가장 짧은 것의 길이를 구하라
  • 범위
    • N: 10 ~ 100,000
    • S: 0 ~ 100,000,000
    • 각 수열의 원소: 10000이하의 자연수
  • 출력
    • 구하자고 하는 최소의 길이
    • 불가능하다면 0 출력

 

코드

import sys
input = sys.stdin.readline

n, s = map(int, input().split())
array = list(map(int, input().split()))

sumValue, start, end = array[0], 0, 0
result = 100001  # 최대 길이가 100,000

while True:
    if sumValue >= s:
        sumValue -= array[start]
        result = min(result, end - start + 1)
        start += 1
    else:
        end += 1
        if end == n:
            break
        sumValue += array[end]

if result == 100001:
    print(0)
else:
    print(result)

 

반응형

'알고리즘 문제 > one_day_one_sol' 카테고리의 다른 글

[1day 1sol]피보나치 함수  (0) 2022.08.31
[1day 1sol] 최소힙  (0) 2022.08.31
[1day 1sol] 점프왕 쩰리 (Small)  (0) 2022.08.31
[1day 1sol] 피보나치 수 5  (0) 2022.08.30
[1day 1sol] 그룹 단어 체커  (0) 2022.08.30
Comments