ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] ํˆฌ ํฌ์ธํ„ฐ(Two Pointers) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Algorithm & Data Structure 2022. 2. 5. 15:49
    ๋ฐ˜์‘ํ˜•

    ๋“ค์–ด๊ฐ€๋ฉฐ

     ๋ฐฑ์ค€ 3273๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฐ 2์ค‘ for๋ฌธ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์„œ ์ œ์ถœํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์„ ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ(Two Pointers)๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ๋‹ค.

     

    ํˆฌ ํฌ์ธํ„ฐ๋ž€?

     ํˆฌ ํฌ์ธํ„ฐ(Two Pointers)๋Š” 1์ฐจ์› ๋ฐฐ์—ด์—์„œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์—ฌ๋Ÿฌ๋ฒˆ ์‹œํ–‰ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ์‹œ๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๊ฐ€ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋กœ ์˜ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.

     

    ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

     ๋ฐฑ์ค€ 2003๋ฒˆ ๋ฌธ์ œ๋ฅผ ์˜ˆ์‹œ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•ด๋ณด์ž.

     

     ์ด ๋ฌธ์ œ์—์„œ๋Š” N๊นŒ์ง€์˜ ๋ฐฐ์—ด์ด ์žˆ๊ณ  ๋ถ€๋ถ„ํ•ฉ์ด M์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ด๋ฅผ ํ’€์ดํ•  ๊ฒฝ์šฐ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๊ฒŒ ๋œ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     ๋จผ์ € ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๋Š” start์™€ ๋ถ€๋ถ„๋ฐฐ์—ด์˜ ๋’ค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” end๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ๋‘ ํฌ์ธํ„ฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ธ๋ฑ์Šค(0)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

     

    ์•„๋ž˜๋Š” ์ด ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

    1.  ์‹œ์ž‘์ (start)๊ณผ ๋์ (end)์ด ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
    2.  ๋ถ€๋ถ„ํ•ฉ๊ณผ M์„ ๋น„๊ตํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•œ๋‹ค.
      1.  ๋ถ€๋ถ„ํ•ฉ๊ณผ M์ด ๊ฐ™๋‹ค๋ฉด count๋ฅผ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
      2.  ๋ถ€๋ถ„ํ•ฉ์ด M๋ณด๋‹ค ์ž‘๋‹ค๋ฉด end๋ฅผ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
      3.  ๋ถ€๋ถ„ํ•ฉ์ด M๋ณด๋‹ค ํฌ๋‹ค๋ฉด start๋ฅผ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
    3.  ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•  ๋•Œ๊นŒ์ง€ 2๋ฒˆ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(void) {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	
    	int N, M;
    	cin >> N >> M;
    	
    	int arr[10002];
    	for (int i = 0; i < N; i++) {
    		cin >> arr[i];
    	}
    	
    	int count = 0;
    	
    	int start = 0;
    	int end = 0;
    	int sum = 0;
    	
    	while (end <= N) {
    		if (sum < M) {
    			sum += arr[end++];
    		} else if (sum > M) {
    			sum -= arr[start++];
    		} else {
    			count++;
    			sum += arr[end++];
    		}
    	}
    	
    	cout << count;
    	
    	return 0;
    }
    ๋ฐ˜์‘ํ˜•
Designed by Tistory.