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가 넘거나 같은 부분의 최소 길이를 구하는 것이다.
투 포인트로 풀면 되기 때문에 양 끝 쪽에서 시작해 부분합들을 비교해가며 right - left의 결과로 부분합의 길이를 구하면 된다.
# 1: 시작(0)부터 내(i)가 있는 곳의 부분합
# 2: 변수들 초기화, answer는 최대 1,000,000이기 때문에 1,000,001로 초기화
# 3: 투 포인트로 탐색 시작[탐색 끝날 때(left == N)까지]
# 3 if True문: 부분합(left ~ right)이 S와 같거나 넘을 경우, 최소 길이일 경우 업데이트 -> left + 1해서 최소 길이 탐색
# 3 if False문: 부분합이 S를 넘지 않아 right가 끝이 아니라면 right 먼저 증가시켜주고 그렇지 않다면 left를 증가
# 4: answer가 변하지 않았다면 부분합을 구하지 못 하기 때문에 0을 출력하고, 그렇지 않다면 answer 값을 출력
if __name__ == "__main__":
N, S = map(int, input().split())
arr = list(map(int, input().split()))
# 1
sum_arr = [0] * (N + 1)
for i in range(1, N + 1):
sum_arr[i] = sum_arr[i - 1] + arr[i - 1]
# 2
answer = 1000001
left = 0
right = 1
# 3
while left != N:
if sum_arr[right] - sum_arr[left] >= S:
if right - left < answer:
answer = right - left
left += 1
else:
if right != N:
right += 1
else:
left += 1
# 4
if answer != 1000001:
print(answer)
else:
print(0)
728x90
반응형
'~2023' 카테고리의 다른 글
[Python] 백준 14002번 문제, 가장 긴 증가하는 부분 수열 4 (0) | 2022.05.02 |
---|---|
[Python] 백준 2467번 문제, 용액 (0) | 2022.05.02 |
[Python] 멀쩡한 사각형 - Summer/Winter Coding(2019) (0) | 2022.04.21 |
[Python] 오픈채팅방 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.04.21 |
[논문 리뷰] FaPN: Feature-Aligned Pyramid Network for Dense Image Prediction (0) | 2022.04.21 |