๋ฌธ์ œ

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;
}