Coding Problem/Greedy

[BOJ 1339] 단어 수학

Yepchani 2025. 3. 12. 20:00
반응형

문제

단어 수학

https://www.acmicpc.net/problem/1339

 

 

풀이

설명

변환이 끝났을 때, 단어의 합의 최댓값을 구하는 문제입니다.

 

규칙은 다음과 같습니다.

  • 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿉니다.
  • 같은 알파벳은 같은 숫자로 바꿔야 합니다.
  • 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 됩니다.

 

방법은 다음과 같습니다.

  1. 각 문자별로 자릿수 가중치를 구합니다.
  2. 가장 가중치가 큰 문자부터 큰 숫자를 배정합니다.

 

예시 코드

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);
}