๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with Python]_39_ํˆฌ ํฌ์ธํ„ฐ ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with python

[์ด๊ฒƒ์ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with Python]_39_ํˆฌ ํฌ์ธํ„ฐ

์ง•์ง•์•ŒํŒŒ์นด 2022. 2. 16. 00:23
728x90
๋ฐ˜์‘ํ˜•

220216 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ใ€Ž์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹คใ€ ์˜ youtube๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค>

https://www.youtube.com/watch?v=ttLRltNDiCo&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=39 

 

 

 

 

 

 

 

1. ํˆฌ ํฌ์ธํ„ฐ (Two Pointers)

: ๋ฆฌ์ŠคํŠธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ ๋‘ ๊ฐœ์˜ ์ ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

: ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ๋Š” ์‹œ์ž‘๊ณผ ๋์  2๊ฐœ์˜ ์ ์œผ๋กœ ์ ‘๊ทผํ•  ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„ ํ‘œํ˜„ํ•œ๋‹ค

 

 

EX) ํŠน์ •ํ•œ ํ•ฉ์„ ๊ฐ€์ง€๋Š” ๋ถ€๋ถ„ ์—ฐ์† ์ˆ˜์—ด ์ฐพ๊ธฐ

- N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ์ˆ˜์—ด

- ํ•ฉ์ด M์ธ ๋ถ€๋ถ„ ์—ฐ์† ์ˆ˜์—ด์˜ ๊ฐœ์ˆ˜

- ์ˆ˜ํ–‰ ์‹œ๊ฐ„ O(N)

 

1) ์‹œ์ž‘์ (strat)๊ณผ ๋์ (end)์ด ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ ์ธ๋ฑ์Šค ๊ฐ€๋ฆฌํ‚ค๊ธฐ

2) ํ˜„์žฌ ๋ถ€๋ถ„ ํ•ฉ์ด M ๊ณผ ๊ฐ™๋‹ค๋ฉด ์นด์šดํŠธ

3) ํ˜„์žฌ ๋ถ€๋ถ„ ํ•ฉ์ด M๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, end 1 ์ฆ๊ฐ€

4) ํ˜„์žฌ ๋ถ€๋ถ„ ํ•ฉ์ด M๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด, start 1 ์ฆ๊ฐ€

5) ๋ชจ๋“  ๊ฒฝ์šฐ ํ™•์ธํ•  ๋•Œ๊นŒ์ง€ 2~4 ๊ณผ์ • ๋ฐ˜๋ณต

 

 

 

 

 

 

 

  • python
n = 5 # ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜ N
m = 5 # ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„ํ•ฉ M
data = [1, 2, 3, 2, 5] # ์ „์ฒด ์ˆ˜์—ด

count = 0
interval_sum = 0
end = 0

# start๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๋ฐ˜๋ณต
for start in range(n):
    # end๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งŒํผ ์ด๋™์‹œํ‚ค๊ธฐ
    while interval_sum < m and end < n:
        interval_sum += data[end]
        end += 1
    # ๋ถ€๋ถ„ํ•ฉ์ด m์ผ ๋•Œ ์นด์šดํŠธ ์ฆ๊ฐ€
    if interval_sum == m:
        count += 1
    interval_sum -= data[start]

print(count)

  • c++
#include <bits/stdc++.h>

using namespace std;

int n = 5; // ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜ N
int m = 5; // ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„ํ•ฉ M
int arr[] = {1, 2, 3, 2, 5}; // ์ „์ฒด ์ˆ˜์—ด

int main() {
    int cnt = 0;
    int intervalSum = 0;
    int end = 0;

    // start๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๋ฐ˜๋ณต
    for (int start = 0; start < n; start++) {
        // end๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งŒํผ ์ด๋™์‹œํ‚ค๊ธฐ
        while (intervalSum < m && end < n) {
            intervalSum += arr[end];
            end += 1;
        }
        // ๋ถ€๋ถ„ํ•ฉ์ด m์ผ ๋•Œ ์นด์šดํŠธ ์ฆ๊ฐ€
        if (intervalSum == m) {
            cnt += 1;
        }
        intervalSum -= arr[start];
    }

    cout << cnt << '\n';
}
  • java
import java.util.*;

class Main {
    public static int n = 5; // ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜ N
    public static int m = 5; // ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„ํ•ฉ M
    public static int[] arr = {1, 2, 3, 2, 5}; // ์ „์ฒด ์ˆ˜์—ด

    public static void main(String[] args) {
        int cnt = 0;
        int intervalSum = 0;
        int end = 0;

        // start๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๋ฐ˜๋ณต
        for (int start = 0; start < n; start++) {
            // end๋ฅผ ๊ฐ€๋Šฅํ•œ ๋งŒํผ ์ด๋™์‹œํ‚ค๊ธฐ
            while (intervalSum < m && end < n) {
                intervalSum += arr[end];
                end += 1;
            }
            // ๋ถ€๋ถ„ํ•ฉ์ด m์ผ ๋•Œ ์นด์šดํŠธ ์ฆ๊ฐ€
            if (intervalSum == m) {
                cnt += 1;
            }
            intervalSum -= arr[start];
        }

        System.out.println(cnt);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments