백준 2910 - 빈도정렬 JS 본문
반응형
https://www.acmicpc.net/problem/2910
이 문제는 그 말마따나 등장 빈도가 높은 순서대로 정렬, 등장 빈도가 같을 시 등장 순서대로 정렬하는 문제다.
문제를 해결하기 위해
객체에 각 숫자의 등장 빈도를 기록하고, 해당 객체를 정렬하는 방식으로 답을 구했다.
// 입력값
// 5 2
// 2 1 2 1 2
const fs = require('fs')
const input = fs.readFileSync(process.platform === "linux" ? "/dev/stdin":"입력.txt")
.toString().trim().split('\n')
function solution(data) {
data.shift()
// 객체 생성
const table = {}
const arr = data[0].split(' ')
// 단축평가를 활용한 등장횟수 기록
arr.forEach((el)=> table[el] = (table[el] || 0) + 1)
// 객체 정렬
const sorted = Object.entries(table).sort((a,b)=> {
// 등장 횟수 내림차순 정렬
if(a[1] !== b[1]) return b[1] - a[1]
// 등장 순서 오름차순 정렬
else return arr.indexOf(a[0]) - arr.indexOf(b[0])
})
// 정답 배열
let result = []
sorted.forEach((el)=> {
// n = 숫자 / times = 등장횟수
const [n, times] = el
// 숫자 n으로 times 만큼 채워진 배열 생성
const temp = Array.from({length : times}, ()=> n)
// 배열 합치기
result = [...result, ...temp]
})
console.log(result.join(' '))
}
solution(input)
반응형
'개발 > algorithm' 카테고리의 다른 글
백준 1388 - 바닥장식 (DFS) JS (0) | 2023.09.10 |
---|---|
프로그래머스 - Lv.3 가장 먼 노드 (BFS) JS (0) | 2023.09.09 |
백준 1969 - DNA, JS (0) | 2023.09.07 |
백준 11725 - 트리의 부모찾기 (BFS) JS (0) | 2023.09.06 |
백준 1759 - 암호 만들기 (백트래킹) JS (0) | 2023.09.05 |
Comments