https://www.acmicpc.net/step/20920
let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')
let [N,M] = [input[0].split(' ')[0],input[0].split(' ')[1]]
input.shift();
let arr = input.filter((el)=>{ // [1]
if(el.length >= parseInt(M)) return el;
}).sort().sort((a,b)=>b.length - a.length)
let map = new Map()
for(let x of arr){ //[2]
if(map.has(x)) map.set(x,map.get(x)+1)
else map.set(x,1)
}
let sortArr = [...map].sort((a,b)=>b[1]-a[1]) //[3]
let sortTmp = []
for(let x of sortArr){
sortTmp.push(x[0]) //[4]
}
console.log(sortTmp.join('\n'))
- 받아온 배열을
filter
함수를 통해서 첫번째 조건으로 길이가 4인 원소만 리턴하고sort
함수로 알파벳순으로 정렬한 후sort
함수로 길이에 따라서 내림차순으로 정렬한다Map
을 만들어서 정렬된 배열에서 같은 인덱스의 갯수를 넣어준다Map
을 배열로 변환시켜서 갯수에 따라서sort
함수로 정렬- 새로운 배열에 이름 부분만 푸쉬해주기
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
let [N, M] = input[0].split(' ').map(v=>+v);
let freq = new Map();
for (let i = 1; i < input.length; i++) {
if (input[i].length >= M) freq.set(input[i], (freq.get(input[i])||0)+1);
}
freq = [...freq].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];
}
}).map(v=>v[0]).join('\n');
console.log(freq);
받아온
input
을for
문을 돌면서 길이가M
보다 큰 수를Map
에다가 바로 넣었고 배열로 만들어서sort
함수로 검사할때 단어의 갯수가 같은 경우와 다른경우를 나눠서 정렬하였다.
숫자가 같을때는 길이를 검사해서 길이가 같다면 문자순으로 정렬하고 아니면 길이순으로 정렬하면서 원소의 숫자가 같지 않을때는 내림차순으로sort()
문을 하나로 다 정리했다! 👍🏻