
만약 GCF가 주어지면 (100 * G) + (10 * C) + (1 * F) 와 같은 형태로 나타내면 될 것 같다는 생각이 들었다.
이렇게 되면 G=9, C=8, F=7일 때에 최대값을 구할 수 있다.

이렇게 선언된 배열을 오름차순으로 정렬 후 뒤에서부터 9, 8, 7 ... 숫자를 각각 곱해주면 주어진 수의 합을 최대로 만드는 프로그램을 작성할 수 있다.
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[] alpha = new int[26];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
Arrays.fill(alpha, 0);
for(int i=0; i<n; i++){
String str = br.readLine(); // 입력받은 단어
for(int j=0; j<str.length(); j++){
char c = str.charAt(j);
alpha[c - 'A'] += (int)Math.pow(10, str.length()-1-j);
}
}
Arrays.sort(alpha); // 배열 정렬
int num = 9; // 가장 큰 수부터 넣음
int index = 25; // 가장 큰 자릿값을 가진 알파벳 인덱스
int sum = 0;
while(alpha[index] > 0){
sum += alpha[index] * num;
index--; num--;
}
System.out.println(sum);
}
}