게으른개발너D

[JS] 투포인터 (Two Pointer) 본문

알고리즘/이론

[JS] 투포인터 (Two Pointer)

lazyhysong 2023. 8. 1. 16:25

✨ 투포인터 알고리즘

  • 일차원 배열에 인덱스를 가리키는 두 개의 포인터(변수)를 두고 조작하는 알고리즘 (이 인덱스를 가리키는 변수를 포인터라고 부름)
  • 보통 연속적인 구간에 대한 계산을 할 때 많이 사용한다.

 

예시) 다음 배열에서 합이 10인 수열의 수는?

처음에는 포인터 두개가 전부 첫 인덱스를 가리킨다.
이때는 아직 구간에 대한 합(partialSum)이 7이고 구간 합이 10인 경우는 하나도 찾지 못한 상태이다.
count = 0
partialSum = 7
p1 = 0
p2 = 0
아직 구간 합이 10을 넘지 못했기 때문에 두번째 포인터를 증가시키고 해당 index에 대한 값을 구간 합 변수에 더해준다.
따라서 partialSum 변수는 8이 된다.
count = 0
partialSum = 8
p1 = 0
p2 = 1
아직 구간 합이 10을 넘지 않아서 두번째 포인터를 증가시킨다.
이제 구간 합이 11이 된다.
count = 0
partialSum = 11
p1 = 0
p2 = 2
구간 합이 10을 넘었기 때문에 이번엔 반대로 첫번째 포인터를 증가시킨다.
증가시키면서 기존 값을 partialSum에서 뺴준다.
count = 0
partialSum = 4
p1 = 1
p2 = 2
이번엔 두번째 포인터를 증가시킨다.
그리고 구간 합도 더해준다.
count = 0
partialSum = 9
p1 = 1
p2 = 3
마찬가지로 또 두번째 포인터를 증가시킨다.
이번엔 구간 합이 10이 되었기 때문에 count 변수를 증가시켜준다.
count = 1
partialSum = 10
p1 = 1
p2 = 4
다음 수가 0일 수도 있기때문에 이번에도 두번째 포인터를 증가시켜준다. count = 1
partialSum = 14
p1 = 1
p2 = 5
구간 합이 10을 넘겼기때문에 첫번째 포인터를 증가시켜준다. count = 1
partialSum = 13
p1 = 2
p2 = 5
또 다시 첫번째 포인터를 증가시킨다.
구간 합이 10이 되었기 때문에 count를 증가시킨다.
count = 2
partialSum = 10
p1 = 3
p2 = 5
두번째 포인터를 증가시킨다. count = 2
partialSum = 12
p1 = 3
p2 = 6
첫번째 포인터를 증가시킨다. count = 2
partialSum = 7
p1 = 4
p2 = 6
두번째 포인터를 증가시킨다. count = 2
partialSum = 9
p1 = 4
p2 = 7
또 두번째 포인터를 증가시킨다. count = 2
partialSum = 17
p1 = 4
p2 = 8
두번째 포인터가 끝에 도달했기 때문에 이 후로 첫번째 포인터만 계속 증가시켜준다. count = 2
partialSum = 16
p1 = 5
p2 = 8
첫번째 포인터를 증가시켜준다. count = 2
partialSum = 12
p1 = 6
p2 = 8
첫번째 포인터를 증가시켜준다.
구간 합이 10이 되었기때문에 count를 증가시켜준다. 
count = 3
partialSum = 10
p1 = 7
p2 = 8
결국 모든 포인터가 끝에 도달했다.
투포인터 알고리즘 종료!
count = 3
partialSum = 8
p1 = 8
p2 = 8

 

 

정리

  • 어려운 개념은 아니지만 모를 때는 당하는 문제 유형
  • 백트래킹을 사용하거나 완전 탐색으로 풀려다 시간 제한에 걸리는 경우가 많다.

 


✨ 관련 문제 풀이

https://lazyhysong.tistory.com/entry/JS-Two-Pointer-%EB%B3%B4%EC%84%9D-%EC%87%BC%ED%95%91

 

[JS] Two Pointer - 보석 쇼핑

https://school.programmers.co.kr/learn/courses/30/lessons/67258 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는

lazyhysong.tistory.com

 

Comments