그리디를 활용하는 문제를 더 많이 풀어봐야겠다고 느꼈다.
풀이 방법은 map에 각 문자의 자리수만큼을 계속 더한다. 예를 들어, 문자 'B' 가 십의 자리에 1번, 만의 자리에 2번 나왔다면 map에서는 ('B', 20010) 이 들어있도록 해준다.
그 map의 entryset을 linkedlist에 넣어주고 value 값으로 내림차순 정렬을 해주고, 순서대로 9부터 곱해준 값을 차례로 sum에 더해주면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
class Main {
static Map<Character, Integer> map = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
while (n-- > 0) {
char[] chars = br.readLine().toCharArray();
for (int i = chars.length - 1; i >= 0; i--) {
map.put(chars[i],
map.getOrDefault(chars[i], 0) + (int) Math.pow(10, chars.length - 1 - i));
}
}
int num = 9;
int sum = 0;
LinkedList<Entry<Character, Integer>> list = new LinkedList<>(map.entrySet());
list.sort(Map.Entry.comparingByValue());
Collections.reverse(list);
for (Entry<Character, Integer> entry : list) {
sum += entry.getValue() * num;
num -= 1;
}
System.out.println(sum);
}
}