[백준] 1339 단어 수학 - javascript

Yongwoo Cho·2021년 10월 13일
0

알고리즘

목록 보기
9/104

📌 문제

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

profile
Frontend 개발자입니다 😎

0개의 댓글