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()문을 하나로 다 정리했다! 👍🏻