๋ฌธ์
https://www.acmicpc.net/problem/1806
์ค๋ช
๋ฌธ์ ํผ ๊ธฐ๊ฐ๋ง ๋๋ต 3 ์ผ์ด๋ ๊ฑธ๋ ธ๋ค. ๊ทธ๋ง์ ธ๋ ๋ฐ๋น ์ ๋ฏธ๋ฃจ๋ค๊ฐ ๊ฒจ์ฐ ํ์๋ค. ์ฒ์์๋ ๋ฌด์ง์ฑ์ผ๋ก ์ด์ค for๋ฌธ์ ์ด์ฉํ์ฌ ๋ถ๋ถํฉ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋๋ก ํ์์ผ๋ ๋ฌธ์ ์ ํต์ฌ ์กฐ๊ฑด์ ์ ํ์๊ฐ์ด์๋ค. ๋ฌด์ง์ฑ์ผ๋ก ์ด์ค for๋ฌธ์ ์ด์ฉํด ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ค๊ณ ํ๋ฉด ํ ์คํธ ์ผ์ด์ค์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง์๋ก ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ๊ธฐํ ๊ธ์์ ์ผ๋ก ๋์ด๋ ์ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ์ผ ํ๋๋ฐ ์ฌ๊ธฐ์ ํ์ํ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ๋ก ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ด์๋ค. ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ง๊ทธ๋๋ก ํฌ์ธํฐ(์ปค์)๊ฐ ๋๊ฐ๋ผ๋ ์๋ฏธ์ด๋ฉฐ ์์ด์ด ์์๋ ๋ํฌ์ธํฐ๋ฅผ ๋ชจ๋ 0 ๋ฒ์งธ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋๋กํ๊ณ ํฌ์ธํฐ ์ฌ์ด์ ์๋ ๋ชจ๋ ์์์ ํฉ๊ณผ ๋ชฉํํ๋ ๊ฐ์ ๋น๊ตํ์ฌ ๋ ํฌ์ธํฐ์ ์์น๋ฅผ ์กฐ์ ํ์ฌ ๋ถ๋ถํฉ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ค.(https://butter-shower.tistory.com/226) ์ด๊ฒ์ ์ด์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํ ์ ์์๋ค. ์ผ๋จ n(์์ด์ ๊ธธ์ด) s(๋ชฉํํ๋ ๊ฐ)์ ์ ๋ ฅ๋ฐ๊ณ ์์ด ์์๋ฅผ ์ ๋ ฅ ๋ฐ์๋ค์ ์์์ ๋งํ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๊ธฐ ์ํด์ temp๋ณ์์ ์ด๊ธฐ๊ฐ์ธ ์์ด์์ 0 ๋ฒ์จฐ ์๋ฅผ ๋ฃ๊ณ ๊ทธ๋ค์ ๋ ํฌ์ธํฐ ์ฌ์ด์ ์์๋ฅผ ๋ํ ๊ฐ์ด ๋ชฉํ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ํ์นธ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํค๊ณ ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ์ด๋ํ๋๋กํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ํฌ์ธํฐ๊ฐ ์์ง์ด๋ ์ํฉ์ด ์จ๋ค๋ ๊ฒ์ ๊ณง ์ต์ํ ๋ชฉํํ ๊ฐ์ ๋ง๋ค ์ ์๋ ๋ถ๋ถํฉ์ด ์ต์ ํ๊ฐ๋ ์กด์ฌํ๋ ๊ฒ์ด๋ฏ๋ก ์กด์ฌ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๋ณ์ exist ๋ณ์์ ๊ฐ์ 1(์์)์ผ๋ก ์์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๊ฐ ์์ด์ ๋์ ๋ค๋ค๋ฅด๊ณ , ๋์ด์ ๋ํฌ์ธํฐ ์ฌ์ด์ ๊ฐ์ด ๋ชฉํ๊ฐ์ ๋๋ฌํ์ง ์๋ ์ํ๊ฐ ๋๋ฉด ๋ฐ๋ก ๋ฐ๋ณต๋ฌธ์ ๊ทธ๋ง๋๊ณ ๋น ์ ธ๋์ค๋๋กํ์์ผ๋ฉฐ ์ต์ข ์ ์ผ๋ก exist๊ฐ์ด 0 ์ด๋ฉด ๋ถ๋ถํฉ ์ต์๊ธธ์ด (result_len)์ ๊ฐ์ 0 ์ผ๋ก, ํด๋น์ฌํญ์ด ์๋ค๋ฉด ์ต์๊ธธ์ด๋ฅผ ๊ทธ๋๋ก ์ถ๋ ฅํ๋๋กํ์๋ค. ์ต์๊ธธ์ด๋ ์ ๋ฐ๋ณต๋ฌธ์์ ๋ํฌ์ธํฐ์ ๋ถ๋ถํฉ์ด ๋ชฉํ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ฒ๋๋ ์๊ฐ์ ๋ถ๋ถํฉ๊ธธ์ด๋ฅผ ๊ธฐ์กด์ ๊ตฌํด์ง ์ต์ ๋ถ๋ถํฉ ๊ธธ์ด์ ๋น๊ตํ์ฌ ๊ฐฑ์ ๋๋๋ก ํ์๋ค. ์ด๋ฌธ์ ๋ฅผ ํตํด ์ฝ๋ฉ์ ์ญ์ ๋๊ธฐ, ์ฆ ์๋ฉ์ด๊ฐ ๋ฌด๊ฑฐ์์ผํจ์ ๋ค์๊ธ ๊นจ๋ฌ์๊ณ ๋ ๋ณธ๊ฒฉ์ ์ธ ์ฝ๋ฉ ์ค๋ ฅ์ ํฅ์์ ์ํด์๋ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ๋ฑํ์ํ๊ณ ๋ฌด์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์๋๋ค๋ ๊ฒ์ ๋ชธ์ ์ฒดํํ๊ฒ ๋์๋ค.
์ฝ๋
#include <stdio.h>
int main() {
// 1806 ๋ถ๋ถํฉ - GOLD IV ๐ฅ
int n,s,array[100000];
scanf("%d %d",&n,&s); // ์์ ๊ฐฏ์ / ๋ชฉํ ๋ถ๋ถํฉ
for(int i=0; i<n; i++) //์์ด ์์ ํ๋์ฉ ์
๋ ฅ
scanf("%d",&array[i]);
int temp = array[0]; //๋ํฌ์ธํฐ(์์,๋)์ ์ด๊ธฐ๊ฐ ์
ํ
์ ์ํด ๋ฐฐ์ด 0๋ฒ์งธ๊ฐ ์ถ๊ฐ
int end=0,start=0,result_len=n,exist=0;
while(1)
{
if(temp < s)
{
if(end == n-1)
{
break;
}
else
{
end++;
temp += array[end];
}
}
else if(temp >= s)
{
if(exist == 0)
exist = 1;
if(result_len > end-start+1)
result_len = end-start+1;
temp -= array[start];
start++;
}
}
if(exist == 0)
result_len = 0;
printf("%d",result_len);
return 0;
}