본문으로 바로가기

baekjoon. 단어 정렬

category Algorithm/문제 2021. 1. 4. 14:11

문제

풀이

자바스크립트 내장 함수인 sort()를 이용해서 문제를 풀어보기로 했다

물론 내가 구현할 수도 있었겠지만 구현할 자신이 있기 때문에 굳이 시간 낭비하고 싶지 않기 때문에..

다음에 기회에 구현하는 걸로하고 sort메소드의 콜백을 이용해서 구현해봤다

구현

첫번째

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split('\n');
// const input = [13, 'but', 'i', 'more','ac', 'ab','wont', 'hesitate', 'no', 'more', 'it', 'cannot', 'wait', 'im', 'yours'];
const unDup = [];
input.shift();

input.forEach(v=>{
    if(!unDup.includes(v)) unDup.push(v);
});
unDup.sort();
unDup.sort((a, b) => {
    return a.length - b.length;
});

console.log(unDup.join('\n'));

이걸 짜면서도 스스로가 참으로 조잡한 코드라고 생각했다

중복되는 원소들을 없애기 위해 2중반복문을 돌리고

sort메소드를 이용해서 길이와 사전순으로 정렬하고 싶었는데 수를 정렬할 때는 a-b로하면 오름차순 b-a로 하면 내림차순인걸 알았지만

문자열 정렬은 a,b를 어떻게 비교해서 리턴해주어야하는지 감이 안잡혀서 그냥 sort를 돌리고

두번째에 길이를 기준으로 오름차순 정렬을 한번 더 해주었다

정답은 맞췄지만 소요시간이 너무 오래 걸려서(4000ms) 코드를 고칠 부분을 찾아서 검색

두번째

const input = require("fs").readFileSync("/dev/stdin").toString().trim().split('\n');

input.shift();

input.sort((a, b) => {
    if(a.length === b.length){
        return (a>b) ? 1: -1;
    }
    return a.length - b.length;
});

const answer = [...new Set(input)];

console.log(answer.join('\n'));

sort메소드의 콜백에 대해선 포스팅을 참조

 

Array.sort

자바스크립트에서 배열을 정렬할 때는 배열 내장 메소드인 sort를 이용하면 쉽다 const arr = [123, 142, 145, 100, 190, 200]; console.log(arr.sort()); 정렬이 된 모습 하지만 맨뒤에 35를 추가해 보자 const..

code-anthropoid.tistory.com

문자열은 빼기(-)가 아니라 비교연산(>,<)으로 정렬해주는 것이었다..

대충 설명하면 둘의 길이가 같으면 사전순으로 정렬 그렇지 않으면 길이 순으로 정렬

그렇게 정렬된 배열을 Set에 넣어 중복 원소를 없애고 spread를 사용해서 다시 배열로 만들어준 뒤 출력했다

소요시간은 매우 만족스러운 200ms정도

'Algorithm > 문제' 카테고리의 다른 글

leetcode. Two Sum  (0) 2021.01.11
algospot. PICNIC (미해결)  (0) 2021.01.10
baekjoon. 통계학  (0) 2021.01.02
baekjoon. 수 정렬하기 3  (0) 2021.01.01
baekjoon. 수 정렬하기 2  (0) 2020.12.30