투 포인터

알파로그·2023년 6월 20일
0

알고리즘 스킬

목록 보기
2/19

✏️ 투 포인터

  • 투 포인터는 배열에서 두개의 포인터를 사용해 원하는 조건을 만족시키는 부분을 찾거나,
    원하는 값을 찾는 기술이다.
    - 이 방식으로 시간복잡도 문제를 해결할 수 있다.
    - 주로 정렬된 배열이나 리스트와 관련된 문제에서 유용하게 사용되는 기술이다.

📍 투포인터 사용 방법

🔗 투 포인터를 사용하는 알고릐즘 문제 예시

  • 만약 1 - 15 까지의 값이 들어있는 배열이라고 했을 때 아래와 같은 방식으로 투 포인트 기법을 사용해 해결할 수 있다.
    • 시작은 int sum 에 0번 인덱스 값을 입력하고,
      두 포인터 모두 0번 인덱스에서 시작한다.
    • sum15 보다 작을 경우 end pointer 를 다음 인덱스로 이동시키고,
      그 값을 sum 에 더해준다.
    • sum15 보다 클 경우 start pointer 를 다음 인덱스로 이동시키고,
      그 값을 sum 에서 빼준다.
    • sum15 가 같을경우 count1 을 더해주고 (정답을 찾았다는 뜻),
      end pointer 를 다음 인덱스로 이동시킨다음,
      그 값을 sum 에 더해준다.
  • 위 3가지 조건을 두 포인터가 모두 15에 도착할 때 까지 반복해주면 된다.

📍 투 포인터의 시간 복잡도

  • 투 포인터의 원리를 살펴보면 결국 두개의 포인터는 0번 인덱스 부터 마지막 인덱스까지 모든 경우의 수를 파악할 수 있게된다.
    • 이 것을 시간복잡도 공식으로 표현하면 2N 으로 표시할 수 있다.
    • 시간 복잡도에서 상수는 의미가 없게 되므로 매우 효율적으로 모든 경우의 수를 확인할 수 있게된다.

📍 투 포인터 주의점

  • 합산 하는 변수의 데이터 타입은 long 으로 한다.
  • sum 이 큰 경우 합을 먼저 빼고, start 를 다음 칸으로 이동시킨다.
  • while 문은 시작과 끝의 합이 같거나 작은 경우로 정한다.
profile
잘못된 내용 PR 환영

0개의 댓글