❗ -> ❓ 공통 원소 구하기 : Two Pointers

frenchkebab·2021년 8월 21일
0
post-thumbnail

내 풀이 : 사실상 Brute Force

function solution(arr1, arr2) {
  let answer = [];
  for (let x of arr1) {
    for (let y of arr2) {
      if (x === y) answer.push(y);
    }
  }
  answer = answer.sort((a, b) => a - b);
  return answer;
}

let a = [1, 3, 9, 5, 2];
let b = [3, 2, 5, 7, 8];
console.log(solution(a, b));

접근 법을 알고 푼 풀이

function solution(arr1, arr2) {
  let answer = [];
  arr1 = arr1.sort((a, b) => a - b);
  arr2 = arr2.sort((a, b) => a - b);
  let p1 = 0;
  let p2 = 0;
  while (p1 < arr1.length && p2 < arr2.length) {
    if (arr1[p1] === arr2[p2]) {
      answer.push(arr1[p1]);
      p1++;
      p2++;
    } else if (arr1[p1] > arr2[p2]) p2++;
    else p1++;
  }

  return answer;
}

let a = [1, 3, 9, 5, 2];
let b = [3, 2, 5, 7, 8];
console.log(solution(a, b));

전반적으로 접근법만 듣고도 Solution 과 거의 동일하게 풀었다.
하지만 arr1, arr2sort할 때 배열을 바꾼다는 것을 몰라서 굳이 다시 초기화를 해 주었다


Solution 풀이 : Two Pointers

      function solution(arr1, arr2) {
        let answer = [];
        arr1.sort((a, b) => a - b);
        arr2.sort((a, b) => a - b);
        let p1 = (p2 = 0);
        while (p1 < arr1.length && p2 < arr2.length) {
          if (arr1[p1] == arr2[p2]) {
            answer.push(arr1[p1++]);
            p2++;
          } else if (arr1[p1] < arr2[p2]) p1++;
          else p2++;
        }
        return answer;
      }

      let a = [1, 3, 9, 5, 2];
      let b = [3, 2, 5, 7, 8];
      console.log(solution(a, b));


알게된 점

  • arr.sort()를 하면 arr직접 바꾸어 준다
  • 접근법을 듣고도 머리가 멍 했는데 직접 예시그려서 시뮬레이션을 돌려보니 머릿속에 느낌표가 띵 하고 떠올랐다!
    앞으로는 직접 예시를 돌려보는 습관을 들여야 겠다!
profile
Blockchain Dev Journey

0개의 댓글