티스토리 뷰

알고리즘 공부/백준

백준 1806번

_Yunhwan 2022. 10. 27. 23:30

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 = map(int, input().split())

arr = list(map(int,input().split()))

#투 포인터 사용
start,end = 0 ,0
sum = 0
len = 1e9

for start in range(n):
	#sum이 s보다 작거나 n이 end보다 크면, end+1(다음 원소를 더해줌)
  while sum < s and end<n:
    sum+=arr[end]
    end+=1
	#sum>=s이면 len값을 갱신하고 sum에서 맨 앞 원소를 빼줌
  if sum>=s:
    len = min(len,end-start)
  sum -=arr[start]

if len==1e9:
  print(0)
else:  
  print(len)

투 포인터 사용

start,end 두 개의 포인터를 사용하여

조건에 만족하는 시작 인덱스와, 끝 인덱스를 찾아줌

 

 

sum이 s보다 작거나 n이 end보다 크면, end+1(다음 원소를 더해줌)

sum>=s이면 len값을 갱신하고 sum에서 맨 앞 원소를 빼줌

'알고리즘 공부 > 백준' 카테고리의 다른 글

백준 17086번  (0) 2022.10.29
백준 1062번  (0) 2022.10.27
백준 17070번  (0) 2022.10.26
백준 12869번  (0) 2022.10.26
백준 16953번  (0) 2022.10.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함