코딩테스트 문제풀이/inflearn

[인프런] Node.js / 섹션7-정렬과 그리디, 결정알고리즘 / 7. 좌표정렬

sangchu 2023. 2. 15. 16:46

문제

N개의 평면상의 좌표(x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하 세요. 정렬기준은 먼저 x값의 의해서 정렬하고, x값이 같을 경우 y값에 의해 정렬합니다.

 

풀이

function solution(arr) {
  let answer = arr;
  let j;
  for (let i = 1; i < answer.length; i++) {
    j = i;
    console.log(answer[i] < answer[i - 1]);
    while (answer[j] < answer[j - 1]) {
      [answer[j], answer[j - 1]] = [answer[j - 1], answer[j]];
      j -= 1;
    }
  }
  return answer;
}

let arr = [
  [2, 7],
  [1, 3],
  [1, 2],
  [2, 5],
  [3, 6],
];
console.log(solution(arr));

선택 정렬을 이용해서 풀었다. 이차원 배열을 비교할 때, 첫번째 값이 같다면 두번째 값으로 비교해주는가보다.

 

강사 풀이

function solution(arr) {
  let answer = arr;
  arr.sort((a, b) => {
    if (a[0] === b[0]) return a[1] - b[1]; // x가 같을때 y기준 오름차순
    else return a[0] - b[0]; // x가 다르면 x기준 오름차순
  });
  return answer;
}

let arr = [
  [2, 7],
  [1, 3],
  [1, 2],
  [2, 5],
  [3, 6],
];
console.log(solution(arr));

sort를 이용해서 x의 비교를 통해 푸셨다. 이 방식이 더 효율적이고 직관적인 것 같다.