캐또's coding

11650 - 좌표 정렬하기 - node.js 본문

기초 공부/백준 문제 풀이

11650 - 좌표 정렬하기 - node.js

JS_K_coding 2023. 1. 11. 21:39

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net


숫자 정렬, 그런데 배열을 더한 버전이라고 보면 된다.

문제를 처음 보면 두 숫자 [x, y]에서 x순으로 정렬을 하고 x가 같은 수들은 y로 정렬하기를 생각하는데, sort를 여러번 작성한다면 시간이 초과될 가능성이 높다.

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const cnt = input.shift();
// 입력을 가져오고 첫 번째 값을 빼주는 과정은 지금까지의 과정과 유사하다.

const arr = input.map((x) => x.split(" ").map((y) => parseInt(y)));
// map을 이용해서 한 배열로 되어있는 전체를 각 숫자 묶음씩으로 나눠준다.
// [ [x,y],[x,y]... ]의 모양으로

let result = "";
// 최종 출력을 한번에 하기 위해 result를 할당해둔다.
arr
  .sort((a, b) => {
    if (a[0] !== b[0]) {
      return a[0] - b[0];
    }
    return a[1] - b[1];
  })
  .forEach((x) => {
    result += `${x[0]} ${x[1]}\n`;
  });
  // 조건문을 이용해서 정렬한다.
  // 만약 비교할 두 수의 x자리의 수가 같다면? y자리의 수를 비교한다.
  // forEach로 돌면서 result에 하나씩 추가해준다.
  
console.log(result);
// 출력하면 문제 해결
Comments