Coding Problem/Greedy
[BOJ 1339] 단어 수학
Yepchani
2025. 3. 12. 20:00
반응형
문제
단어 수학
https://www.acmicpc.net/problem/1339
풀이
설명
변환이 끝났을 때, 단어의 합의 최댓값을 구하는 문제입니다.
규칙은 다음과 같습니다.
- 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿉니다.
- 같은 알파벳은 같은 숫자로 바꿔야 합니다.
- 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 됩니다.
방법은 다음과 같습니다.
- 각 문자별로 자릿수 가중치를 구합니다.
- 가장 가중치가 큰 문자부터 큰 숫자를 배정합니다.
예시 코드
function solution() {
const n = Number(input());
const words = Array.from({ length: n }, () => input());
const alphabetMap = new Map();
for (const word of words) {
let placeValue = 1;
for (let i = word.length - 1; i >= 0; i--) {
const char = word[i];
alphabetMap.set(char, (alphabetMap.get(char) || 0) + placeValue);
placeValue *= 10;
}
}
const sortedValues = [...alphabetMap.values()].sort((a, b) => b - a);
let number = 9;
return sortedValues.reduce((sum, val) => sum + val * number--, 0);
}