각 단어들의 자릿수들을 계산해줍니다. 예를 들어 예제 2의 GCF에서 G = 100, C = 10, F = 1 이 되고 ACDEB에서 A = 10000, C는 한번 나왔으므로 기존 값에 더해서 10 + 1000, D는 100, E는 10, B는 1이됩니다. 모든 알파벳에 대한 26개의 공간을 만들어두고 앞서 이 값들을 배열로 표현하면 아래와 같이 됩니다.
import sys
input = sys.stdin.readline
n = int(input())
cands, num = [0] * 26, 9
for _ in range(n):
cand = list(input().rstrip())
for i in range(len(cand)):
cands[ord(cand[i]) - 65] += 10 ** (len(cand) - i - 1)
cands.sort(reverse=True)
for i in range(10):
if not cands[i]:
break
cands[i] *= num
num -= 1
print(sum(cands))
JavaScript
function solution(n, str) {
const cands = Array(26).fill(0);
let num = 9;
str.forEach((cand) => {
for (let i = 0; i < cand.length; i += 1) {
cands[cand[i].charCodeAt() - 65] += 10 ** (cand.length - i - 1);
}
});
cands.sort((a, b) => b - a);
for (let i = 0; i < 10; i += 1) {
if (!cands[i]) break;
cands[i] *= num--;
}
return cands.reduce((accr, curr) => accr + curr, 0);
}
solution(2, ["GCF", "ACDEB"]);