ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 투 포인터(two pointer)란 무엇인가
    CS지식/알고리즘 2021. 7. 22. 12:51

    투 포인터를 알아보기 전에 포인터(pointer)란 무엇을 의미할까?

    포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 의미한다.

    arr = [1,2,3,4,5]
    
    pointer = arr[0]

    위 코드를 포연 5개의 요소를 가지고 있는 배열을 가지고 있는 arr이라는 변수가 있다.

    그리고 이 arr 변수가 차지하고 있는 메모리 공간 중에 0번째 인덱스 번호를 가지고 있는 요소를 가리키는 pointer라는 변수가 있다.

    여기서 pointer라는 변수가 우리가 정의한 포인터라는 것이다.

    (포인터가 가리키는 값을 가져오는 것을 역참조라고 한다.)

     

     

    그러면 투 포인터는 무엇일까?

    위에서 설명한 포인터를 2개를 활용하는 것으로 여러 가지 방식이 있지만 대체적으로 시작점과 끝점 또는 왼쪽 포인터와 오른쪽 포인터 두 지점을 기준으로 하는 문제 풀이방법을 뜻한다.

    이 때 2개의 포인터는 좌우로 자유롭게 움직이며 문제를 풀이한다.

    배열과 같이 여러 요소를 가지고 있는 자료형에서 자주 쓰이며 일반적으로 배열이 정렬되어 있을 때 더 유용하게 쓰일 수 있디.

     

     

    이러한 투 포인터는 슬라이딩 윈도우와 유사해보이는데 공통점과 차이점은 무엇일까?

    먼저, 슬라이딩 윈도우는 고정된 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이용해 문제를 풀이하는 알고리즘을 말한다.

    투 포인터와 슬라이딘 윈도우는 배열 내에서 어떠한 크기를 가지고 있는 윈도우라는 범위 내에서 알고리즘이 이루어지는 것이 유사하다.

    하지만 이 둘을 나눌 수 있는 근본적인 개념은 투 포인터는 윈도우가 가변적이라는 것이고 슬라이딩 윈도우는 고정적이라는 것이다.

    또한, 투 포인터는 좌, 우 2개의 포인터가 양방향으로 있어 자유롭게 이동할 수 있지만 슬라이딩 윈도우는 좌 또는 우 중 한쪽 방향으로만 이동하다는 차이점이 있다.

     

    위 그림을 보며 투 포인터와 슬라이딩 윈도우를 비교해보자.

    투 포인터는 처음에는 배열의 전체 크기를 윈도우의 사이즈로 가지고 시작한다.

    이 후에 어떠한 기준에 의해 왼쪽 포인터가 이동하게 되고 윈도우의 사이즈는 줄어든다.

    그리고 다음에도 어떠한 기준에 의해 오른쪽 포인터가 이동하게 되고 윈도우의 사이즈는 줄어든다.

    이렇게 왼쪽, 오른쪽 자유롭게 이동할 수 있고 윈도우의 사이즈가 가변적이다.

     

    반면, 슬라이딩 윈도우의 그림을 보면 일단은 윈도우의 사이즈가 3으로 고정되어 있다.

    그리고 진행되는 것을 보면 왼쪽 방향으로만 윈도우가 움직이는 것을 알 수 있다.

    이렇게 윈도우의 사이즈가 고정되어있고 왼쪽 또는 오른쪽 한 쪽방향으로만 움직인다.

    댓글

Designed by Tistory.