티스토리 뷰

알고리즘 풀이

BOJ : 1806 부분합

jonyo 2021. 1. 4. 15:20


[BOJ 1806(G4) 리뷰]

오늘 투 포인터를 공부하고 푼 문제다.
투 포인터는 배열 내에서 부분의 합을 구할때 아주 유용하게 쓰이는 알고리즘이다.

배운 개념을 그대로 적용했더니 G4문제치곤 간단하게 풀렸다.

다만 투 포인터를 응용한 문제를 풀려했더니 생각보다 어려웠다. 더 공부해야겠다.

/*
	21.01.04
	BOJ : 1806 부분합 (https://www.acmicpc.net/problem/1806)
	구현
*/
#include <bits/stdc++.h>
using namespace std;

int arr[100001];

int main() {
	cin.tie(0);
	ios::sync_with_stdio(0);
	
	
	int N, S;
	cin >> N >> S;

	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}

	int ans = INT_MAX;
	int s, e, sum;
	s = e = sum = 0;
	
	while (true) {
		if (e == N && sum < S) break;
		else if (sum < S) {
			sum += arr[e++];
		}
		else if (sum >= S) {
			ans = min(ans, e - s);
			sum -= arr[s++];
		}
	}

	if (ans == INT_MAX) cout << 0;
	else cout << ans;
}

 

'알고리즘 풀이' 카테고리의 다른 글

BOJ : 12562 친구비  (0) 2021.01.24
BOJ : 2517 달리기  (0) 2021.01.13
BOJ : 14921 용액 합성하기  (0) 2021.01.09
BOJ : 1644 소수의 연속합  (0) 2021.01.04
BOJ : 14003 가장 긴 증가하는 부분 수열5  (0) 2020.08.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
글 보관함