๋ฐ์ํ
https://www.acmicpc.net/problem/1806
๋ฌธ์
10,000 ์ดํ์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด N์ง๋ฆฌ ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ์์ด์์ ์ฐ์๋ ์๋ค์ ๋ถ๋ถํฉ ์ค์ ๊ทธ ํฉ์ด S ์ด์์ด ๋๋ ๊ฒ ์ค, ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (10 ≤ N < 100,000)๊ณผ S (0 < S ≤ 100,000,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์์ด์ด ์ฃผ์ด์ง๋ค. ์์ด์ ๊ฐ ์์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด์ ธ ์์ผ๋ฉฐ, 10,000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ตฌํ๊ณ ์ ํ๋ ์ต์์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ๊ทธ๋ฌํ ํฉ์ ๋ง๋๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
ํ์ด
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, s;
cin >> n >> s;
vector<int>v(n);
for(int i=0; i<n; i++) {
cin >> v[i];
}
int ans = n+1;
int start=0, end=0;
int tmp = v[start];
while(start<=end && end<n) {
if(tmp>=s) {
ans = min(ans, end-start+1);
tmp -= v[start];
start++;
} else {
end++;
tmp += v[end];
}
}
if(ans==n+1) {
ans = 0;
}
cout << ans;
return 0;
}
๋ฐ์ํ
'๐๏ธ ICPC Sinchon > Two Pointer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1593๋ฒ: ๋ฌธ์ ํด๋ (0) | 2024.08.30 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 15565๋ฒ: ๊ท์ฌ์ด ๋ผ์ด์ธ (0) | 2024.08.29 |
[BOJ][C++] ๋ฐฑ์ค 7795๋ฒ: ๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ (0) | 2024.08.19 |
[BOJ][C++] ๋ฐฑ์ค 2467๋ฒ: ์ฉ์ก (0) | 2024.08.18 |
[BOJ][C++] ๋ฐฑ์ค 2003๋ฒ: ์๋ค์ ํฉ 2 (0) | 2023.07.27 |