728x90
문제
https://www.acmicpc.net/problem/11650
코드
- 처음 시도한 풀이 (시간 초과)
//실버5 좌표 정렬하기 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; let input = fs.readFileSync(filePath).toString().trim().split("\r\n"); let N = Number(input.shift()); let coordinate = []; for (let i = 0; i < N; i++) { coordinate.push(input[i].split(" ").map((i) => Number(i))); } coordinate = coordinate.sort((a, b) => { if (a[0] > b[0]) return 1; else if (a[0] < b[0]) return -1; else { if (a[1] > b[1]) return 1; else return -1; } }); for (let i = 0; i < N; i++) console.log(coordinate[i].join(" "));
- 다시 시도한 풀이 (성공)
//실버5 좌표 정렬하기 const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; let input = fs.readFileSync(filePath).toString().trim().split("\r\n"); let N = Number(input.shift()); let coordinate = input.map((i) => i.split(" ").map((j) => Number(j))); //좌표를 number화 하여 배열에 담기 let answer = ""; coordinate.sort((a, b) => { //각 좌표들을 비교하며 x가 같지않으면 x에 대해 오름차순 정렬하고 if (a[0] !== b[0]) return a[0] - b[0]; //그게 아니면 y에 대해 오름차순 정렬하기 return a[1] - b[1]; }); coordinate.forEach((i) => { //정렬된 좌표들 각각에 대해 answer에 담기 answer += `${i[0]} ${i[1]}\n`; }); console.log(answer);
후기
- 쉽게 풀어서 성공! 이라고 생각했는데 시간초과에서 자꾸 막혔던 문제이다. 다른 분의 풀이를 참고해서 sort()를 적용하는 신박한 방법과 console.log()를 1번만 찍는 걸로 코드를 수정했다.
- 다른 분의 풀이를 참고하여 변경한 sort()코드는 가시적으로도 한눈에 더 이해하기 쉬웠고, 여러 if문을 쓰지 않아 더 효율적인 것 같다. 또한 console.log()를 for문으로 반복적으로 찍는 것보다 문자열로 처리하여 한 번에 출력하는 방법이 있단 것도 배우게 됐다!
잘못된 내용이나 수정이 필요한 내용이 있으면 언제든 댓글 달아주세요 감사합니다 😀
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 소수 구하기 / JavaScript / node.js (0) | 2022.02.15 |
---|---|
[백준] 통계학 / JavaScript / node.js (0) | 2022.02.14 |
[백준] 이전 순열 / JavaScript / node.js (0) | 2022.02.12 |
[백준] 다음 순열 / JavaScript / node.js (0) | 2022.02.12 |
[백준] 모든 순열 / JavaScript / node.js (0) | 2022.02.12 |