์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ

2023. 10. 19. 19:54ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

https://hyejin.tistory.com/1223

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

5. ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ 

์„ค๋ช…

N์ž…๋ ฅ์œผ๋กœ ์–‘์˜ ์ •์ˆ˜ N์ด ์ž…๋ ฅ๋˜๋ฉด 2๊ฐœ ์ด์ƒ์˜ ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ์ •์ˆ˜ N์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

๋งŒ์•ฝ N=15์ด๋ฉด

7+8=15

4+5+6=15

1+2+3+4+5=15

์™€ ๊ฐ™์ด ์ด 3๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์–‘์˜ ์ •์ˆ˜ N(7<=N<1000)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ

์ฒซ ์ค„์— ์ด ๊ฒฝ์šฐ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ž…๋ ฅ 1 

15

 

์˜ˆ์‹œ ์ถœ๋ ฅ 1

3

 

 

๋ฌธ์ œ ํ’€์ด 1

public int solution(int n) {
    int answer = 0, sum;
    for (int i = 1; i <= n; i++) {
        sum = i;
        for (int j = i + 1; j <= n - i; j++) {
            sum += j;
            if (sum == n) {
                answer++;
                break;
            } else if (sum > n) {
                break;
            }
        }
    }
    return answer;
}

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป : ๋‚˜๋Š” ์šฐ์„  ์ €๋ฒˆ ๋ฌธ์ œ ํ’€์ด์™€ ๋™์ผํ•˜๊ฒŒ ํ’€์—ˆ๋‹ค. ์ด์ค‘ for ๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ฒซ๋ฒˆ์งธ for๋ฌธ์—์„œ๋Š” ๋”ํ•  ์ฒซ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , ๋‘๋ฒˆ์งธ for๋ฌธ์—์„œ๋Š” ๊ทธ ์ฒซ๋ฒˆ์งธ์ˆ˜ ๋‹ค์Œ๋ถ€ํ„ฐ ๊ฐ’์„ ๋”ํ•˜๋Š”๋ฐ ์ด๋•Œ sum์ด n๊ณผ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด answer ์— +1 ํ•ด์ฃผ๊ณ  break ํ•˜๊ณ  ๋‹ค์Œ ์ฒซ๋ฒˆ์งธ ์ˆ˜๋กœ ๋„˜์–ด๊ฐ€๊ณ ,,, 

sum์ด n๋ณด๋‹ค ํฌ๋ฉด ๋ฐ”๋กœ break๋ฌธ์œผ๋กœ ๋‚˜์˜ค๋„๋ก ํ–ˆ๋‹ค. 

 

 

 

๋ฌธ์ œ ํ’€์ด 2

public int solution2(int n) {
    int answer = 0, sum =0;
    int lt = 0;
    int m = n / 2 + 1;
    int[] arr = new int[m];
    for (int i = 0; i < m; i++) {
        arr[i] = i + 1;
    }

    for (int rt = 0; rt < m; rt++) {
        sum += arr[rt];
        if (sum == n) {
            answer++;
        }

        while (sum >= n) {
            sum -= arr[lt++];

            if (sum == n) {
                answer++;
            }
        }
    }


    return answer;
}

๐Ÿ‘พ : ๊ฐ•์‚ฌ๋‹˜์€ ์šฐ์„  ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์ด๋•Œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” n / 2 + 1 ๋กœ ์„ค์ •ํ–ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์–ด์ฐจํ”ผ n / 2 + 1 ๋’ค์— ์—ฐ์†๋œ ๊ฐ’๋“ค์„ ๋”ํ•ด๋ดค์ž n ๊ฐ’์„ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด 1 ~ n ๊ฐ’์„ ๋ฐฐ์—ด์— ๋‹ด์•„์ค€๋‹ค. 

 

๊ทธ ๋‹ค์Œ์€ ์ด์ „ ๋ฌธ์ œ ํ’€์ด์™€ ๋™์ผํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ๋จผ์ € sum ์— arr[rt] ๊ฐ’์„ ๋”ํ•œ๋‹ค์Œ, sum๊ณผ n ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ , ๊ฐ™์œผ๋ฉด answer +1 n๋ณด๋‹ค ํฌ๋ฉด while๋ฌธ์„ ๋Œ๋ฉด์„œ sum์—์„œ arr[lt] ๊ฐ’์„ ๋นผ์ค€ ๋‹ค์Œ lt + 1 ํ•ด์ค€๋‹ค. ๊ทธ ๋‹ค์Œ ์ด sum ์„ ๋‹ค์‹œ n๊ณผ ๋น„๊ตํ•˜๊ณ ... ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด sum ์ด n์ธ ์—ฐ์†๋œ ์ˆซ์ž์˜ ํ•ฉ์€ ๋ช‡๊ฐœ์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'์ธํ”„๋Ÿฐ > ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿ’–๐Ÿ’—์ทจ๋ฏธ