-
[백준] 1806번: 부분합(Python)Algorithm PS👩🏻💻/백준 2023. 7. 28. 15:06
1. 문제 링크
https://www.acmicpc.net/problem/1806
1806번: 부분합
첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
www.acmicpc.net
2. 풀이
- 분류: 누적합, 투포인터
- (10 ≤ N < 10만 )과 S (0 < S ≤ 1억) 이므로 O(n)으로 풀어야지, 이중 반복문으론 아무리 break를 걸어도 시간초과 남.
- while 문 1개로 돌리기..
누적합 배열 만들어서도 해봤는데 왜 시간초과 나거나 틀렸다고 하는지 모르겠움🤦♀️(아직 풀이중)
import sys input = sys.stdin.readline n, s = map(int, input().split()) array = list(map(int, input().split())) length = n if sum(array) < s: # 0 나오는 예외처리 length = 0 else: lp, rp = 0, 0 temp = array[lp] # temp: 부분합 담는 변수 while True: # 반복문 1개로(아니면 시간초과) if temp < s: rp += 1 if rp == n: break # 부분합 < s and rp == n인 경우 계산 그만. temp += array[rp] else: length = min(length, rp-lp + 1) temp -= array[lp] lp += 1 print(length)
'Algorithm PS👩🏻💻 > 백준' 카테고리의 다른 글
[백준] 2206번: 벽 부수고 이동하기(그래프, Python) (0) 2023.08.04 [백준] 10986번: 나머지 합(Python) (0) 2023.07.31 [백준] 1182번: 부분수열의 합(Python, Backtracking) (0) 2023.07.11 [백준] 1764번: 듣보잡(Python) (0) 2023.07.06 [백준] 8980번: 택배(Python) (0) 2023.07.06