[34일차] Multiple Pointers - averagePair 리뷰

저요·2022년 10월 26일

2022 100th day challenge

목록 보기
34/97

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하면 된다.

두 솔루션 모두 방법은 같았지만, 포인터를 어디에서 출발시키냐가 큰 차이가 되었다. 포인터가 꼭 왼쪽에서 오른쪽으로 움직일 필요가 없으며 둘 다 같은 방향으로 움직일 필요가 없다는 것을 알 수 있었다.

참고

https://www.udemy.com/share/105zfq3@DtBvSvDSk3O5m9mvY4zx7pxMS_VnfPOjedc2ujogKNAev-WfndWwouRZrbjOYaw08w==/

profile
웹개발

0개의 댓글