[JS][백준]11650_좌표 정렬하기
Algorithm/BaeKJoon

[JS][백준]11650_좌표 정렬하기

문제 번호

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

알고리즘 분류

정렬

 

문제 풀이

 C++ 에서 처럼 구조체를 사용하여 좌표들을 입력받은 후 정렬을 해주려고했다. 하지만 JS에는 구조체가 존재하지 않는다. function과 배열을 사용하여 C++에서의 구조체 배열처럼 사용할 순 있지만 그렇게 할 경우 시간초과에 걸린다.

 

그래서 filter 매서드를 사용하여 입력을 받았다.

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

const N = Number(input.shift());
const xy = input.filter((v, i) => i >= 0).map((v) => v.split(' '));

 

이후엔 sort 함수를 사용하여 정렬을 진행해주고 출력해주면 된다. sort함수는 O(NlogN)이다.

let answer = '';
xy.sort((a, b) => {
  if (a[0] === b[0])
    return a[1] - b[1];
  else
    return a[0] - b[0];
})
  .forEach(arr => {
    answer += `${arr[0]} ${arr[1]}\n`
  });


console.log(answer);

 

전체코드

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

const N = Number(input.shift());
const xy = input.filter((v, i) => i >= 0).map((v) => v.split(' '));


let answer = '';
xy.sort((a, b) => {
  if (a[0] === b[0])
    return a[1] - b[1];
  else
    return a[0] - b[0];
})
  .forEach(arr => {
    answer += `${arr[0]} ${arr[1]}\n`
  });


console.log(answer);

특이사항

 

 

'Algorithm > BaeKJoon' 카테고리의 다른 글

[JS][백준]21608_상어 초등학교  (0) 2021.09.09
[JS][백준]20055_컨베이어 벨트 위의 로봇  (0) 2021.09.09
[JS][백준]2108_통계학  (0) 2021.08.24
[JS][백준]1260_DFS와 BFS  (0) 2021.08.24
[JS][백준]1436_영화감독 숌  (0) 2021.08.19