728x90
- 문제
10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.
- 입력
첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
- 출력
첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다.
- 코드
n, m = map(int, input().split())
num = list(map(int, input().split()))
start = 0
end = 0
answer = num[0]
cnt = 1
minimum = 1e+5+1
while start < n:
# m보다 같거나 크면 길이가 최소인지 확인
if answer >= m:
minimum = min(minimum, cnt)
# m보다 같거나 크고 end가 전진하다가 마지막 index일때
# start지점 추가
if answer >= m or end == n-1:
answer -= num[start]
start += 1
cnt -= 1
# m보다 작을때 end를 전진
else:
end += 1
answer += num[end]
cnt += 1
print(0 if minimum == 1e+5+1 else minimum)
- 출처
728x90
'알고리즘' 카테고리의 다른 글
백준 16234번: 인구 이동 (python, 파이썬) (3) | 2020.10.28 |
---|---|
백준 2751번: 수 정렬2 (python, 파이썬) (0) | 2020.10.27 |
프로그래머스 베스트앨범 (python, 파이썬) (0) | 2020.10.24 |
백준 11655번: ROT13 (python, 파이썬) (0) | 2020.10.20 |
백준 1012번: 유기농 배추 (python, 파이썬) (0) | 2020.10.20 |
댓글