https://www.acmicpc.net/problem/1339
const [n, ...arr] = require("fs")
.readFileSync("dev/stdin")
.toString()
.trim()
.split(/\s+/);
let hash_map = new Map();
let cnt = (ans = 0);
let cur = 9;
//자릿수 계산
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
cnt = Math.pow(10, arr[i].length - (j + 1));
hash_map.set(arr[i][j], (hash_map.get(arr[i][j]) || 0) + cnt);
}
}
// 알파벳의 계수순으로 내림차순 정렬
const sort_map = new Map([...hash_map.entries()].sort((a, b) => b[1] - a[1]));
// v를 9부터 차례대로 곱해서 ans에저장
for (let [k, v] of sort_map) {
ans += v * cur;
cur--;
}
console.log(ans);
✔ 알고리즘 : Hashing을 통한 그리디 알고리즘
✔ 이중 for문을 돌면서 hash_map에 현재 알파벳의 계수를 저장
ex) ABC -> 100A + 10B + 1C
✔ 현재 hash_map에는 알파벳과 그 알파벳에 해당되는 계수들이 들어가있는 상태
✔ hash_map을 value 기준으로 내림차순 정렬하여 sort_map에 저장
✔ sort_map에서 for문을 돌며 9부터 1로가면서 value값과 곱하여 ans에 저장
ex) ABC -> 100A + 10B + 1C -> 100*9 + 10*8 + 1*7
✔ 난이도 : 백준 기준 골드4