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

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

728x90

 

https://hyejin.tistory.com/1222

 

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

https://hyejin.tistory.com/1221 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ๊ณตํ†ต ์›์†Œ https://hyejin.tistory.com/1220 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, S

hyejin.tistory.com

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

 

 

 

4. ์—ฐ์† ๋ถ€๋ถ„์ˆ˜์—ด 

์„ค๋ช…

N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ด ์ˆ˜์—ด์—์„œ ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด ํŠน์ •์ˆซ์ž M์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ช‡ ๋ฒˆ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

๋งŒ์•ฝ N=8, M=6์ด๊ณ  ์ˆ˜์—ด์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด

1 2 1 3 1 1 1 2

ํ•ฉ์ด 6์ด ๋˜๋Š” ์—ฐ์†๋ถ€๋ถ„์ˆ˜์—ด์€ {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}๋กœ ์ด 3๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1≤N≤100,000), M(1≤M≤100,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ˆ˜์—ด์˜ ์›์†Œ๊ฐ’์€ 1,000์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

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

 

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

8 6
1 2 1 3 1 1 1 2

 

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

3

 

 

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

public int solution(int n, int m, int[] arr) {
    int answer = 0, sum;

    for (int i = 0; i < n; i++) {
        sum = arr[i];
        for (int j = 1; j <= n - i-1; j++) {
            sum += arr[i + j];
            if (sum == m) {
                answer++;
                break;
            } else if (sum > m) {
                break;
            }
        }
    }
    return answer;
}

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป : ์ด ๋ฌธ์ œ๋„ ๋ณด๊ณ  ์ด์ค‘ for ๋ฌธ ๋ง๊ณ  ์–ด๋–ป๊ฒŒ ํ’€์ง€ ๊ฐ์ด ์•ˆ์™€์„œ ๊ทธ๋ƒฅ ๋‚ด ์‹๋Œ€๋กœ ํ•œ๋ฒˆ ํ’€์–ด๋ดค๋‹ค. 

๋Œ€์‹  ์ตœ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์•ˆ๋˜๋„๋ก ํ’€์–ด๋ดค๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ ์•ˆ๊ฑธ๋ฆฌ๊ณ  ์ •๋‹ต์ด์—ˆ๋‹ค ! 

 

๋‘๋ฒˆ์งธ for๋ฌธ์„ ๋Œ ๋•Œ n ๋งŒํผ ๋‹ค ๋„๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ i ์— ๋”ํ•  ๊ฐ’์„ ๊ตฌํ•ด์คฌ๋‹ค. ์ฆ‰ i = 1 ์ด๋ฉด i + 1 ~ i + 7 ๊นŒ์ง€ , i = 2 ์ด๋ฉด i + 1 ~ i + 6 ๊นŒ์ง€.. 

์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์„œ sum ์— ๋ˆ„์ ํ•ด์„œ ๋”ํ•˜๋Š”๋ฐ ์ด๋•Œ sum ์ด ์ฃผ์–ด์ง„ m ๊ฐ’๊ณผ ๊ฐ™์œผ๋ฉด answer์— +1 ํ•ด์ฃผ๊ณ , ๋”์ด์ƒ ๋ฐ˜๋ณต๋ฌธ ๋Œ ํ•„์š”๊ฐ€ ์—†์œผ๋‹ˆ break ํ•ด์ฃผ๊ณ , m๋ณด๋‹ค sum์˜ ๊ฐ’์ด ์ปค์ง€๋ฉด ์—ญ์‹œ ๋”์ด์ƒ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉฐ ๋”ํ•  ํ•„์š” ์—†์œผ๋ฏ€๋กœ break ํ•ด์ค€๋‹ค. 

 

 

 

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

public int solution2(int n, int m, int[] arr) {
    int answer = 0, sum =0, lt = 0;
    for (int rt = 0; rt < n; rt++) {
        sum += arr[rt];
        if (sum == m) answer++;
        while (sum >= m) {
            sum -= arr[lt++];
            if (sum == m) {
                answer++;
            }
        }
    }

    return answer;
}

๐Ÿ‘พ : ์ด ํ’€์ด๋Š” ๊ฐ•์‚ฌ๋‹˜์ด ํ‘ผ ๋ฐฉ์‹์ด๋‹ค. ๋จผ์ € lt , rt ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , sum์œผ๋กœ arr[0] ๋ถ€ํ„ฐ arr[n-1]๊นŒ์ง€ ๋”ํ•˜๋Š”๋ฐ ์ด๋•Œ ์ด ๊ฐ’์ด m ๊ณผ ๊ฐ™์œผ๋ฉด answer์— +1 ํ•ด์ค€๋‹ค. ๊ทผ๋ฐ sum์ด m ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด arr[lt] ๊ฐ’์„ sum์—์„œ ๋นผ์ค€๋‹ค. (๋งจ ์™ผ์ชฝ ๋ฐฐ์—ด ๊ฐ’์„ ๋นผ์ฃผ๋Š” ๊ฒƒ) ๊ทธ ๋‹ค์Œ lt ๊ฐ’์„ 1 ์ฆ๊ฐ€ํ•ด์ค€๋‹ค. ๋‹ค์Œ ์ด sum ๊ฐ’์ด m ๊ณผ ๊ฐ™์œผ๋ฉด answer ์— +1 ํ•ด์ฃผ๊ณ , m ๋ณด๋‹ค ์—ฌ์ „ํžˆ ํฌ๋‹ค๋ฉด arr[lt] ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ m ๋ณด๋‹ค ์ž‘์•„์ง€๋ฉด ๋‹ค์‹œ arr[rt] ๊ฐ’์„ ๋”ํ•˜๊ณ  ๋น„๊ตํ•œ๋‹ค .

 

์ฆ‰, ์šฐ์„  ๋”ํ•˜๊ณ  ๋น„๊ตํ•˜๊ณ  ๋นผ๊ณ  ๋น„๊ตํ•˜๊ณ .. ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

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

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ 2 (์ˆ˜ํ•™์ ์œผ๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•)  (1) 2023.10.20
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ  (0) 2023.10.19
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ์ตœ๋Œ€ ๋งค์ถœ  (1) 2023.10.18
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)] : ๊ณตํ†ต ์›์†Œ ๊ตฌํ•˜๊ธฐ  (0) 2023.10.17
์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ์„น์…˜3. Two Pointers, Sliding Window [ํšจ์œจ์„ฑ : O(n^2) --> O(n)]  (0) 2023.10.13