์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿฅš/๋ฌธ์ œํ’€์ด (Java)

[Programmers] ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ (Lv.2) 2023/7/9

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 7. 9. 23:52
728x90
๋ฌธ์ œ ์ œ๋ชฉ ์ •๋‹ต๋ฅ  ๋‚œ์ด๋„
์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ 49% Lv.2
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ์š”์•ฝ

์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆ˜์—ด๊ณผ ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์€ ์กด์žฌํ•œ๋‹ค. ์ด๋•Œ, ์ตœ์†Œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ๋ผ.

์กฐ๊ฑด 1) ๋ถ€๋ถ„์ˆ˜์—ด์€ ๋‘ ์ธ๋ฑ์Šค์˜ ์›์†Œ์™€ ๊ทธ ์‚ฌ์ด์˜ ์›์†Œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

์กฐ๊ฑด 2) ๋ถ€๋ถ„์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆ˜์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์กฐ๊ฑด 3) ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ž์ชฝ ์ธ๋ฑ์Šค์˜ ๋ถ€๋ถ„์ˆ˜์—ด์ด ์ตœ์†Œ ๋ถ€๋ถ„์ˆ˜์—ด์ด๋‹ค.

 

 

์ƒ๊ฐํ•  ๊ฒƒ

์šฐ์„ , '์—ฐ์†๋œ'๊ณผ ๋ถ€๋ถ„์ˆ˜์—ด ๋‹จ์–ด๋ฅผ ๋ณด๊ณ  ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ๋– ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค.

์ฒ˜์Œ ์‹œ์ž‘์„ ๋งจ ์•ž์œผ๋กœ ํ•˜๋ฉด ๋‘ ํฌ์ธํ„ฐ๋Š” ์ฆ๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

์ˆ˜์—ด์˜ ํ•ฉ์„ ๋Š˜๋ฆฌ๋ ค๋ฉด, ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•˜๊ณ , ํ•ฉ์„ ์ค„์ด๋ ค๋ฉด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

 

- ์ˆ˜์—ด์˜ ํ•ฉ ์ฆ๊ฐ€(์ธ๋ฑ์Šค ๋ฒ”์œ„ ์ฆ๊ฐ€)

  • startidx ๊ฐ์†Œ, ํ˜น์€ endidx ์ฆ๊ฐ€

- ์ˆ˜์—ด์˜ ํ•ฉ ๊ฐ์†Œ(์ธ๋ฑ์Šค ๋ฒ”์œ„ ๊ฐ์†Œ)

  • startidx ์ฆ๊ฐ€, ํ˜น์€ endidx ๊ฐ์†Œ

 

ํ’€์ด

Step1. ํ•ฉ์ด k๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ

  • ๋ฒ”์œ„ ๊ฐ์†Œ(startidx ์ฆ๊ฐ€)

Step2. ํ•ฉ์ด k๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ

  • ๋ฒ”์œ„ ์ฆ๊ฐ€(endidx ์ฆ๊ฐ€)

Step3. ํ•ฉ์ด k์™€ ๊ฐ™์€ ๊ฒฝ์šฐ

  • ๊ธฐ์กด์˜ ๋‹ต์˜ ๋ฒ”์œ„์™€ ๋น„๊ตํ•˜์—ฌ, ๊ธฐ์กด ๋ฒ”์œ„๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ(ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ํ˜„์ƒ์œ ์ง€) 
  • startidx ์ฆ๊ฐ€์‹œ์ผœ ์ƒˆ๋กœ์šด ๋‹ต ํƒ์ƒ‰

 

์ฝ”๋“œ

class Solution {
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[2];
        // ๊ธธ์ด ์ˆœ์„œ๋กœ ํƒ์ƒ‰
        int startidx=0;
        int endidx=0;
        int sum=0;
        int min_range=sequence.length;
        while(startidx<=endidx){
            if(sum<k){
                if (endidx>=sequence.length){
                    break;
                }
                sum+=sequence[endidx++];
            }else{//sum>k
                sum-=sequence[startidx++];
            }
            if (sum==k){ //์ตœ์†Œ์™€ ๋น„๊ตํ•˜์—ฌ ์—…๋ฐ์ดํŠธ
                if (min_range>endidx-startidx-1){
                    answer[0] = startidx;
                    answer[1] = endidx-1; 
                    min_range=answer[1]-answer[0];
                }
            }
        }
        return answer;
    }
}

 

728x90