https://www.acmicpc.net/problem/1339
알파벳을 숫자로 치환해서 더했을 때 값이 가장 큰 경우의 최댓값을 출력해주면 된다
처음엔 각각 문자에 숫자를 미리 넣어주면서 파싱을 해주고 경우의 수를 구해서 가장 큰 경우를 출력하는 식으로 접근했는데 너무 복잡하기도 하고 아닌 것 같아 방향을 바꿔봤다
핵심은 A를 9로 치환하고 B를 8로 치환하고가 아닌, 계산된 결과의 최댓값을 구한다는 것이다
예제에 있는 ACDEB + GCF를 자릿값만 가지고 계산해보면 다음과 같은 결과가 나온다
{
A: 10000,
B: 1,
C: 1000 + 10,
D: 100,
E: 10,
F: 1,
G: 100,
}
이를 풀어보면 다음과 같이 나타낼 수 있다
10000A + 1B + 1010C + 100D + 10E + 1F + 100G
(10000 * 9) + (1010 * 8) + (100 * 7) + (100 * 6) + (10 * 5) + (1 * 4) + (1 * 3)
const input = require("fs").readFileSync("./dev/stdin").toString().trim().split("\n");
const N = +input[0];
const words = input.slice(1).map((word) => word.split(""));
const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
//1.
const obj = {};
//2.
words.forEach((word) => {
word.reverse().forEach((char, idx) => {
if (!obj[char]) obj[char] = 0;
obj[char] += 10 ** idx;
});
});
let answer = 0;
//3.
Object.values(obj)
.sort((a, b) => b - a)
.forEach((v) => (answer += v * nums.pop()));
console.log(answer);