코딩연습

[백준 알고리즘] Node.js 20920. 영단어 암기는 괴로워

니 뽀 2023. 5. 18. 12:00

1. 문제

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

 

20920번: 영단어 암기는 괴로워

첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단

www.acmicpc.net

 

2. 풀이

const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,m] = inputs.shift().split(' ').map(Number);

let words = new Map();
for(let i = 0; i < n; i++){
  words.set(inputs[i], 0)
}

for(let i = 0; i < n; i++){
  words.set(inputs[i], words.get(inputs[i])+1)
}

const sortWords = [...words].sort((a,b) => {
    if(a[1] === b[1]) {
        if(a[0].length === b[0].length){
            return a[0] < b[0] ? -1 : 1
        } else {
            return b[0].length - a[0].length;
        }
    } else {
        return b[1] - a[1];
    }
})

let answer = "";
for(let [key,val] of sortWords){
  if(key.length >= m) answer += `${key}\n`
}

console.log(answer)

- map() 메서드 이용하여 해당 단어가 얼마나 나오는지 확인.

- sort() 메서드를 이용하여 주어진 우선순위를 적용.

- 이후 for()문을 이용해서 answer에 출력할 내용 적용.

 

3. 정리

- 처음에 주어진 우선순위를 적용하지 않아 틀렸고, sort() 메서드에서 많이 헤맸다. 천천히 하나씩 적용하도록 노력해야겠다.

- map() 메서드에 대해서도 알아보도록 해야겠다.