https://www.acmicpc.net/problem/1806
๋ฌธ์
10,000 ์ดํ์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด N์ง๋ฆฌ ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ์์ด์์ ์ฐ์๋ ์๋ค์ ๋ถ๋ถํฉ ์ค์ ๊ทธ ํฉ์ด S ์ด์์ด ๋๋ ๊ฒ ์ค, ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (10 ≤ N < 100,000)๊ณผ S (0 < S ≤ 100,000,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์์ด์ด ์ฃผ์ด์ง๋ค. ์์ด์ ๊ฐ ์์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด์ ธ ์์ผ๋ฉฐ, 10,000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ตฌํ๊ณ ์ ํ๋ ์ต์์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ๊ทธ๋ฌํ ํฉ์ ๋ง๋๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๊ณจ๋4์ธ๋ฐ ๋น๊ต์ ์ฌ์ด ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ๋ฅผ ์ ์ฝ์..
s ์ด์์ ํฉ์ด ๋์ค์ง ์๋๋ค๋ฉด 0์ ์ถ๋ ฅํ๊ธฐ!!
๋์ ํ์ด
#include <iostream>
using namespace std;
int main(){
int n;
int s;
int nums[100001]={0};
int minlen = 100001;
cin >> n >> s;
for (int i = 0; i < n; ++i){
cin >> nums[i];
}
int left = 0;
int right = 0;
int nowsum = nums[0];
while(right < n){
if (nowsum < s){
right++;
nowsum += nums[right];
}
if(nowsum >= s){
if(minlen > right-left+1){
minlen = right - left + 1;
}
nowsum -= nums[left];
left++;
}
}
if(minlen==100001) cout << 0;
else cout << minlen;
return 0;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 14891 : ํฑ๋๋ฐํด (์๋ฎฌ๋ ์ด์ ) (0) | 2023.03.23 |
---|---|
[C++/BOJ] 17836 : ๊ณต์ฃผ๋์ ๊ตฌํด๋ผ! (์๋ฎฌ๋ ์ด์ ) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.23 |
[C++/BOJ] 2467 : ์ฉ์ก (ํฌํฌ์ธํฐ) (0) | 2023.03.22 |
[C++/BOJ] 10942 : ํฐ๋ฆฐ๋๋กฌ? (DP) (0) | 2023.03.18 |
[C++/BOJ] 12865 : ํ๋ฒํ ๋ฐฐ๋ญ (DP) / ํ ์คํธ์ผ์ด์ค ํฌํจ (1) | 2023.03.17 |