๊ธฐ๋ก๋ฐฉ

Lv.2 : ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ

Soom_1n 2023. 11. 30. 09:38

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

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

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

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆ˜์—ด์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘ ํ•ฉ์ด k๊ฐ€ ๋˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๊ฐ™์€ ๊ธธ์ด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ ๋จผ์ € ๋‚˜์˜จ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์ธ๋ฑ์Šค๋ฅผ ์ด๋™ํ•˜๋ฉฐ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ, ํˆฌํฌ์ธํ„ฐ๋กœ ํ’€์ดํ•œ๋‹ค.
    • ๋‘ ์ธ๋ฑ์Šค left์™€ right๋ฅผ ์ง€์ •ํ•˜๊ณ , k๋ณด๋‹ค ์ž‘์œผ๋ฉด right + 1, k๋ณด๋‹ค ํฌ๋‹ค๋ฉด left + 1๋กœ ์ด๋™ํ•œ๋‹ค.
    • ์ธ๋ฑ์Šค๊ฐ€ ๋ณ€ํ•  ๋•Œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ๋„ ๋ณ€๊ฒฝํ•˜๋ฉฐ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด k์™€ ๊ฐ™์•„์ง„๋‹ค๋ฉด, ๊ธธ์ด๊ฐ€ ์ตœ์†Œ์ผ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

class Solution {
    public int[] solution(int[] sequence, int k) {

        int[] answer = new int[2];
        int min = Integer.MAX_VALUE;

        int left = 0;
        int right = 0;
        int window = sequence[0];

        while (left <= right && right < sequence.length) {
            if (window == k) {

                if (min > right-left) {
                    min = right-left;
                    answer[0] = left;
                    answer[1] = right;
                }

                window -= sequence[left++];
                if (++right < sequence.length)
                    window += sequence[right];
            } else if (window > k) {
                window -= sequence[left++];
            } else {
                if (++right < sequence.length)
                    window += sequence[right];
            }
        }
        return answer;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ขŒ์šฐ ์ธ๋ฑ์Šค๋ฅผ left, right์— ์ €์žฅํ•˜๊ณ  ํ•ฉ์„ window์— ์ €์žฅํ•œ๋‹ค.
  • int ๋ณ€์ˆ˜ min์— ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด k์ผ๋•Œ์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๊ณ , ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๊ฐ„๋‹ค.
  • left๊ฐ€ right๋ณด๋‹ค ์ปค์ง€๊ฑฐ๋‚˜, right๊ฐ€ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋”์ด์ƒ ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ์—†๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ณ„์‚ฐ์„ ์ข…๋ฃŒํ•œ๋‹ค.
    • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด k๊ฐ€ ๋๋‹ค๋ฉด, min๋ณด๋‹ค ์งง์€ ๊ฒฝ์šฐ ์ •๋‹ต ์ธ๋ฑ์Šค๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , left์™€ right๋ฅผ +1 ํ•œ๋‹ค.
    • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด k๋ณด๋‹ค ํฌ๋‹ค๋ฉด, window์—์„œ ๊ธฐ์กด left ์ธ๋ฑ์Šค ๊ฐ’์„ ๋นผ๊ณ , left๋ฅผ +1 ํ•œ๋‹ค.
    • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์ด k๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, right๋ฅผ +1ํ•˜๊ณ , widnow์— right ์ธ๋ฑ์Šค ๊ฐ’์„ ๋”ํ•œ๋‹ค.
  • ์ €์žฅํ•œ ์ธ๋ฑ์Šค ๋ฐฐ์—ด answer๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์„ ํ™•์ธํ•˜๋ฉฐ ์ธ๋ฑ์Šค๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด ์ „ํ˜•์ ์ธ ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์ด๋ผ ๊ฐ„๋‹จํžˆ ํ’€์ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

728x90