🧠 문제 요약
- 2차원 평면 위의 점 N개가 주어진다
- 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 문제
- 입력: 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000), 둘째 줄부터 N개의 줄에 각 점의 위치 xi와 yi
- 출력: 정렬된 좌표를 한 줄에 하나씩 출력
✅ 실행 예시 및 결과
입력:
5
3 4
1 1
1 -1
2 2
3 3
출력:
1 -1
1 1
2 2
3 3
3 4
✍️ 내 풀이
- input.slice(1)로 좌표 데이터만 분리
- 빈 배열 coordinates를 생성하여 파싱된 좌표들을 저장
- for문으로 각 줄을 순회하며 좌표 분리하고 coordiantes에 push
- sort()로 정렬
- forEach()와 join(' ')을 사용해서 각 좌표를 공백으로 구분하여 한 줄씩 출력
💻 내가 푼 코드
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const N = parseInt(input[0]);
const inputLines = input.slice(1);
const coordinates = [];
for(let i = 0; i < N; i++) {
const line = inputLines[i];
const parts = line.split(' ');
coordinates.push([parseInt(parts[0]), parseInt(parts[1])]);
}
coordinates.sort((a, b)=> {
if (a[0] !== b[0]) {
return a[0] - b[0];
} else {
return a[1] - b[1];
}
});
coordinates.forEach((code) => {
console.log(code.join(' '));
});
📎 남이 푼 코드
const [N, ...lines] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const coordinates = lines.map(line => line.split(' ').map(Number));
coordinates.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
console.log(coordinates.map(coord => coord.join(' ')).join('\n'));
- const [N, ...lines]: 구조분해할당으로 첫 번째 요소는 N에, 나머지는 lines 배열에 한 번에 할당
- map(Number): parseInt() 대신 Number 함수를 사용해 더 간결하게 숫자로 변환
- a[0] - b[0] || a[1] - b[1]: 논리 OR 연산자로 다중 조건 정렬을 한 줄로 표현
- coordinates.map().join('\n'): 전체 결과를 하나의 문자열로 만들어서 한 번에 출력
- for문 없이 map() 체이닝으로 함수형 프로그래밍 스타일 구현
🔍 회고 & 배운 점
- 2차원 배열 정렬에서 다중 조건 정렬은 헷갈린다
- 나 같은 경우는 변수명을 정확히 해야 가독성이 높은 것 같은데 메모리를 많이 먹는 거 같다(시간도......후반에는 시간초과로 실패;;;;)
- 점점 함수형으로도 시도해봐야겠다
- 그래도 어제 나이순 정렬을 한번 해서 그런지 굳 ㅋㅋ
반응형
'Study > Coding Test' 카테고리의 다른 글
[baekjoon] 수 찾기(JavaScript) (0) | 2025.08.21 |
---|---|
[baekjoon] 체스판 다시 칠하기(JavaScript) (0) | 2025.08.20 |
[baekjoon] 나이순 정렬(JavaScript) (0) | 2025.08.18 |
[baekjoon] 단어 정렬(JavaScript) (5) | 2025.08.16 |
[baekjoon] 이항계수1(JavaScript) (2) | 2025.08.15 |