๐ ๋ฌธ์
https://www.acmicpc.net/problem/1806
๋ฌธ์
10,000 ์ดํ์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด N์ง๋ฆฌ ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ์์ด์์ ์ฐ์๋ ์๋ค์ ๋ถ๋ถํฉ ์ค์ ๊ทธ ํฉ์ด S ์ด์์ด ๋๋ ๊ฒ ์ค, ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N (10 ≤ N < 100,000)๊ณผ S (0 < S ≤ 100,000,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์์ด์ด ์ฃผ์ด์ง๋ค. ์์ด์ ๊ฐ ์์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด์ ธ ์์ผ๋ฉฐ, 10,000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ตฌํ๊ณ ์ ํ๋ ์ต์์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ๊ทธ๋ฌํ ํฉ์ ๋ง๋๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
โ๏ธ ํ์ด
ํฌ ํฌ์ธํฐ๋ฅผ ์จ๋ณด์ ํด์ ๊ณ ๋ฅธ ๋ฌธ์ ์๋ค. ์ด๋๊ฐ์ ์ฝํ ์์๋ ์๋์ ๊ฐ์ ์ฝ๋๋ก ๋น์ทํ๊ฒ ํ์๋ ๊ธฐ์ต์ด ์๋ค.
๐ฅ ์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ ์ฝ๋ ์ ํ์ ์ธ์๋๋ฉด ๋๊ณ ๋๊ณ ์ ์ธ ์ ์์ผ๋ ์ธ์๋์! ๐ฅ
โ๏ธ ๋งจ ์ฒ์ ์์น์ ํฌ ํฌ์ธํฐ๋ฅผ ๋๋ค.
โ๏ธ ํ์ฌ SUM ๊ฐ์ด ๋ชฉํ๋ณด๋ค ์ ์ผ๋ฉด, ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ํ ์นธ ์ฆ๊ฐ์ํค๊ณ ๊ทธ ๊ฐ์ ๋ํด์ค๋ค.
โ๏ธ ํ์ฌ SUM ๊ฐ์ด ๋ชฉํ๋ณด๋ค ๋ง์ผ๋ฉด, ์ต์ํฉ์ ๋์ ๊ฒ์ด๋ฏ๋ก ํ์ฌ ๊ธธ์ด๊ฐ ์ต์ ๊ธธ์ด์ธ์ง ํ์ธํ์ฌ ์ ๋ฐ์ดํธ ํ๋ค.
โ๏ธ ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ ๊ฒ์ "์ต์ ๊ธธ์ด"์ด๋ฏ๋ก, ์ต๋ํ ์ ์ ์๋ฅผ ํฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฐ๋ผ์ SUM๊ฐ์ด ๋ชฉํ๋ฅผ ๋์์ ๊ฒฝ์ฐ์๋ ์ต์ ๊ธธ์ด๋ฅผ ์ฐพ์ ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ํ ์นธ ์ฆ๊ฐ์ํจ๋ค.
๋งจ ์ผ์ชฝ ๊ฐ์ ๋บ ์๋ก์ด SUM๊ฐ์, ๋ค์ ๋ชฉํ๋ณด๋ค ํฐ์ง ์ ์์ง์ ๋ฐ๋ผ ์๋ก ์ฐ์ฐ์ ์ํํ ๊ฒ์ด๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_1806_๋ถ๋ถํฉ_๊ณจ๋IV {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // input length
int S = Integer.parseInt(st.nextToken()); // minimum sum
int[] array = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
array[i] = Integer.parseInt(st.nextToken());
}//input
int left = 0, right = 0, sum = 0;
int MAX = 100000001;
int result = MAX;
while(left<=right) {
if(sum >= S) {
result = Math.min(result, right-left);
sum -= array[left++];
}else if(right==N) break;
else{
sum += array[right++];
}
}
System.out.println(result==MAX?0:result);
}//end of main
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ