ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 투포인터
    TodayILearned 2022. 4. 22. 00:30

    급 문제 풀다가 투포인터가 예전에도 헷갈렸던 기억에

    구글링 해가면서 기억을 더듬어봤는데 전혀 기억이 안나..!

    이래서 무슨 망각 곡선 이런게 있는거군. 정말 살에 와닿는 그래프다.

    왜 구글링 페이지들이 다 초면인가 하니,

    예전엔 파이썬 알고리즘 책으로 공부했었어서 더 생경하게 느껴지는지도.

     

    투포인터를 치면 블로그에서는 보통 배열 내 요소들의 합에 대한 것을 예시로 들어서

    그 예에만 한정된 문제인 줄 알았는데, 알고보니 투포인터는 그런 용도로만 사용되는 기법은 아니었다.

     

    예를들어, 배열 내 요소들끼리 비교를 하려면 순차적으로 모든 요소들을 하나씩 비교해야 한다.

    어쩌면 for문을 이중으로 돌려서 O(n^2)의 시간복잡도를 만들면서 문제를 풀이 할 수도 있다.

     

    반면 투포인터를 이용하면 O(n)의 시간복잡도를 갖고 문제를 풀 수 있다.

    문제에서 원하는 방향에 따라 포인터의 위치를 다르게 두고,

    각각의 포인터가 가르키는 값끼리 비교하거나, 순서를 바꾸는 방식이다.

     

    이렇게 되면 굳이 이중 반복문을 돌지 않고도 O(n)의 시간 복잡도 내에서

    배열 내의 두 요소를 비교할 수 있게되므로 좀 더 효율적인 방법이 되겠다.

     

    자주 나오는 유형은 

    - 배열의 순서 바꾸기

    - 글자의 순서 뒤집기

    - 배열 내 요소들의 합이 N이 되는 경우의 수, 또는 인덱스

     

     

     

    'TodayILearned' 카테고리의 다른 글

    [네트워크] web socket 알아보기  (0) 2021.08.02
    [CSS] BEM  (0) 2020.08.18
Designed by Tistory.