반응형
백준 1181번 단어 정렬
레벨: 실버 5
언어: JavaScript
문제설명
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력값
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력값
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
📑풀이 과정
js의 sort
함수를 잘 이용하여 풀 수 있다.
조건을 보면 길이가 짧은 것부터, 길이가 같으면 사전순, 중복은 없이 이다.
필자는 중복제거, 길이가 짧은 순으로 정렬, 같은 길이는 사전순으로 정렬 순서로 문제를 풀었다.
📋풀이 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
solution(input);
function solution(inputArr) {
let answer = [];
let arr = inputArr;
arr.shift();
arr = Array.from(new Set(arr)); // 중복제어
let sorted = arr.sort((a, b) => { // 길이별 정렬
if (a.length !== b.length) {
return a.length - b.length;
}
});
for (let i = 1; i <= sorted[sorted.length - 1].length; i++) { // 같은 길이에서 사전순으로 정렬
let temp = sorted.filter((el) => el.length === i);
answer.push(...temp.sort());
}
for (let word of answer) { // 정답 출력
console.log(word);
}
}
💻 코드 라인별 풀이
arr = Array.from(new Set(arr));
set는 중복이 없는 배열로 생각하면 쉽다. 중복을 없에기 위해 set을 사용했다.
let sorted = arr.sort((a, b) => { // 길이별 정렬
if (a.length !== b.length) {
return a.length - b.length;
}
});
sort는 그냥 sort()로 사용하면 사전 순으로 정렬하지만 콜백함수를 넣어주면 콜백함수의 내용으로 정렬한다.
a, b는 단어를 받아오고
a, b의 길이가 같지 않을 때 a.length - b.length
하는 데 이것은 문자열 길이 기순으로 오름 차순하는 것이다.
for (let i = 1; i <= sorted[sorted.length - 1].length; i++) { // 같은 길이에서 사전순으로 정렬
let temp = sorted.filter((el) => el.length === i);
answer.push(...temp.sort());
}
그리고 나서 길이가 같은 단어를 sort()로 사전순으로 정렬하고 answer에 추가해준다.
추가된 answer를 한줄씩 출력하면 된다.
문제를 풀기 위해 막 푼 경향이 있다. 좀더 효율적이고 보기 좋게 충분히 바꿀 수 있을 듯 하다.
다음번에는 더 간략한 방법을 고민해서 다시 풀어보기로 하자
반응형
'지난 글 모음' 카테고리의 다른 글
[백준 node.js] 2805번 나무자르기 이진탐색 (0) | 2022.02.10 |
---|---|
[백준 node.js] 1920번 수 찾기 (이진탐색) feat - 시간 초과, 메모리 초과 (0) | 2022.02.09 |
[백준 node.js] 2292번 벌집 javascript (0) | 2022.02.08 |
[백준 node.js] 1259번 팰린드 롬수 javascript (0) | 2022.02.07 |
[백준 Node.js] 1085번 직사각형에서 탈출 javascript (0) | 2022.02.07 |