문제

https://www.acmicpc.net/problem/1181

코드

const input = require("fs").readFileSync("/dev/stdin", "utf-8").trim().split("\n");

const p = input.shift();

let tmp = [];

for(let i = 0; i < input.length; i++){
    tmp.push(input[i]);
}

const set = new Set(tmp);
const newArr = [...set];

let result = "";
newArr.sort((a, b) => {
    if(a.length === b.length){
        return a.localeCompare(b);
    }
    return a.length - b.length;
}).forEach((item) => {
    result += `${item}\n`;
})
console.log(result);

풀이

문제를 풀면서 다양한 method 활용의 중요성을 깨달아가고 있습니다.
문제의 요구사항에 맞추기 위해 배열에 넣은 후 new Set을 활용해 중복 단어를 제거하였습니다.
중복 단어가 제거된 newArr배열을 sort하였습니다. 이때 a.length와 b.length가 같을 때 a.localeCompare(b)를 통해 사전식 순서로 비교하였습니다. 길이가 다른 경우, a.length - b.length를 통해 짧은 길이가 앞에 오도록 배치하였습니다. 이후 결과를 반환할 result를 선언 후 forEach를 통해 하나씩 담아준 후 반환하였습니다.

localeCompare();

localeCompare() 메서드는 두 개의 문자열을 비교하여 한 문자열이 다른 문자열보다 큰지, 작은지, 같은지를 결정하는 JavaScript 내장 함수입니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글