Multiple Pointers - averagePair
https://velog.io/@eprnfmfmfm/27%EC%9D%BC%EC%B0%A8-Multiple-Pointers
다중포인터를 이용한 본격적인 문제에 들어가보자. 해당 문제는 언제나처럼 제일 상단의 링크에서 확인할 수 있다. 해당 문제에서는 주어진 배열에서 값과 같은 평균이 나오는 한 쌍의 숫자를 찾아내는 문제였다.
나는 먼저 포인터 두개를 변수로 생성했다. 왼쪽에서 오른쪽으로 차례대로 더하며 비교할 생각으로 말이다.
var first = 0;
var second = 1;
해답에서는 전혀 다르게 접근해서 문제를 해결했다. 왼쪽에서 오른쪽으로 순번대로가 아닌 양끝에 포인터를 두고 서로 반대방향으로 진행하게 만든것이다.
let start = 0
let end = arr.length-1;
하지만 진행하는 방식은 두 솔루션 모두 똑같은 양상으로 진행되었다.
//첫번째 포인터와 두번째 포인터를 더해서 합계 구하기
for(let i = 0; i<arr.length; i++){
var sumData = arr[first] + arr[second];
이렇게 두 포인터의 합계나 평균을 구하고
//합계가 평균*2와 같다면 true리턴
if(sumData === valData){
return true;
같다면 true를, 다르다면 아래와 같이 분기를 두어 체크를 했다.
}else if(sumData < valData){
//합계가 평균*2 보다작다면 모두 한 칸씩 이동
first++;
second++;
}else{
//합계가 평균*2 보다 크다면 첫번째 포인터만 왼쪽으로 이동
first--;
}
}
알아두어야 할 점은 다중포인터패턴은 정렬된 배열에서 사용가능하다는 것이다.
이 법칙이 기억나지 않았다면 이전 내 게시글을 참고하길 바란다.
Multiple Pointers Pattern
https://velog.io/@eprnfmfmfm/16%EC%9D%BC%EC%B0%A8-Multiple-Pointers-Pattern
Multiple Pointers Pattern 2
https://velog.io/@eprnfmfmfm/20%EC%9D%BC%EC%B0%A8Multiple-Pointers-Pattern-2
따라서 합계나 평균이 기준값보다 작으면 큰 숫자로 포인터를 이동시키면 되고, 그 반대로 합계나 평균이 기준값보다 크면 작은 숫자의 포인터를 이동시켜 수를 줄이면 된다. 같다면 그 수를 return하면 된다.
두 솔루션 모두 방법은 같았지만, 포인터를 어디에서 출발시키냐가 큰 차이가 되었다. 포인터가 꼭 왼쪽에서 오른쪽으로 움직일 필요가 없으며 둘 다 같은 방향으로 움직일 필요가 없다는 것을 알 수 있었다.