백준 알고리즘 11651번[좌표정렬하기 2] JS (2차원 배열 정렬하기)

Chaeeun Lee·2022년 9월 28일
0

백준 알고리즘

목록 보기
7/7

📌 문제


2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

📌 입력


첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

📌 출력


첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

📌 예제 입력


5
0 4
1 2
1 -1
2 2
3 3

📌 예제 출력

1 -1
1 2
2 2
3 3
0 4

📌 풀이

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().
split('\n');

let arr = input.slice(1).map((el) => el.split(" ").map(Number))

arr.sort((a, b) => {
  if (a[1] === b[1]) return a[0] - b[0]
    else return a[1] - b[1]
  })
 
console.log(...arr.join("\n").split(","))

📌 풀이 해석

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().
split('\n');

let arr = input.slice(1).map((el) => el.split(" ").map(Number))

// input.slice(1)
// [ '0 4', '1 2', '1 -1', '2 2', '3 3' ]
// 입력 값의 0번째 요소를 빼주기 위해서 slice 메서드 사용
// input.shift() 사용해도 된다

// .map((el) => el.split(" "))
// [
//  [ '0', '4' ],
//  [ '1', '2' ],
//  [ '1', '-1' ],
//  [ '2', '2' ],
//  [ '3', '3' ]
// ]


// .map((el) => el.split(" ").map(Number))
// 2차원 배열 안의 각각의 요소들을 어떻게 Number 처리를 어떻게 해줘야힐지 고민이 많았다
// 처음에는 .map((el) => el.split(" ")).map(Number) 이렇게도 해봤다;;
// 이렇게하다가 안되서 sort 안에서 하나하나 Number 처리해줬다
// split 뒤에 바로 붙이면 된다!!!

// .map(Number)
// .map((el) => Number(el))과 같다. 
// 요소가 같으면 생략가능하다 

// 최종
// [ [ 0, 4 ], [ 1, 2 ], [ 1, -1 ], [ 2, 2 ], [ 3, 3 ] ]


arr.sort((a, b) => {
  if (a[1] === b[1]) return a[0] - b[0]
    else return a[1] - b[1]
  })

// 오름차순 정렬
// arr.sort((a,b) => a-b) 를 응용한다. 
 
console.log(...arr.join("\n").split(","))

참고 블로그

profile
나는야 뚝딱이 개발자야

0개의 댓글