코딩테스트 대비/백준 알고리즘

BOJ - 11650 좌표 정렬하기

JellyApple 2024. 5. 19. 01:41

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

문제 등급: 실버5 

문제 풀이 : x좌표 기준으로 오름차순 정렬 후 같으면 y좌표 증가하는 방식이다. 

const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");
let N = Number(input[0]);
let arr = [];
for(let i=1;i<=N;i++){
    let [x,y] = input[i].split(" ").map(Number);
    arr.push([x,y]);
}
function compare(a,b){
    if(a[0]!=b[0]) return a[0]-b[0];
    else return a[1]-b[1];
}
arr.sort(compare);
let answer = "";
for(let point of arr){
    answer += point[0] + " " + point[1] + "\n";
}
console.log(answer);

 

배운 것 

: a[0] , b[0]  / a[1], b[1] 에 대해 설정한 것은 예시로 들면 다음과 같다.

만약 arr 이 [ [1,2] , [2,3] ,[3,5] ] 이런 식으로 들어가 있을 때 a[0]은 1 , b[0]은 2와 같다.

이런 식으로 a[0] = 2 , b[0] = 3 이런 식으로 비교하다가 같은 값일 때는 a[1] 즉 y좌표 기준으로 오름차순 정렬해준다.

: point[0]도 같은 방식으로 x좌표 , point[1]도 같은 방식으로 y 좌표이며 for문을 돌려서 이를 반복 출력해준다.

 

시간 복잡도 : 정렬방법을 사용하기 때문에 O(NlogN)이다.