문제 유형 : 투포인터
투포인터 문제를 처음 풀어봤는데,, 이해하기 어려웠다.. ! ㅠㅠ
i가 1씩 늘어날 때마다, 최대로 뻗어나갈 수 있는 j의 위치는 항상 같거나 증가하기 때문에! (i인덱스 값만큼 줄어드니까)
이 문제는 한 방향으로 두 포인터가 진행되는 투포인터 문제인 것이다..
하지만... 이해를 하는 것도 어려웠는데 구현은 또 다른 문제라.. 시간을 많이.. 썼다
투포인터 문제를 몇개 더 풀어보면서 익숙해져야겠다.
import sys
INT_MAX = sys.maxsize
n, s = tuple(map(int, input().split()))
arr = [0] + list(map(int, input().split()))
ans = INT_MAX
sum_val = 0 # 더해줄 값
j = 0
for i in range(1, n + 1):
while j + 1 <= n and sum_val < s:
sum_val += arr[j + 1]
j += 1
if sum_val < s:
break
ans = min(ans, j - i + 1)
sum_val -= arr[i]
if ans == INT_MAX:
ans = 0
print(ans)
'CS > 알고리즘' 카테고리의 다른 글
[카테부] 코테스터디 2주차 - N과 M(5) (백준 15654) (0) | 2024.08.13 |
---|---|
[카테부] 코테스터디 1주차 - 배열 합치기 (백준 11728) (0) | 2024.08.09 |
[카테부] 코딩테스트 1회차 (4) | 2024.07.20 |
[알고리즘] 백트래킹 재귀함수안의 값 재귀함수 밖으로 가지고 나오기 (0) | 2024.05.21 |
[자료구조] HashMap (1) | 2024.04.15 |