자리수가 가장 높은 알파벳에 순서대로 높은 값을 부여하면 되는 문제이다.
그렇지만 캐리 등이 있을 수 있다는 점을 염두해서 문제를 풀도록 해야한다.
이를 위해 예시 GCF + ACDEB의 경우
(100G+10C+1F)+(10000A+1000C+100D+10E+1B)로 변환하여
10000A+1010C+100D+100G+10E+1F+1B로 계산하고, 계수가 높은 순으로 높은 숫자를 부여해서 계산하도록 하면 된다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int alphabets[] = new int[26];
for (int i = 0; i < n; i++) {
String str = in.next();
char ch[] = str.toCharArray();
int index = 1;
for (int j = ch.length - 1; j >= 0; j--) {
alphabets[ch[j] - 'A'] += index;
index *= 10;
}
}
PriorityQueue<Alphabet> queue = new PriorityQueue<Alphabet>();
for (int i = 0; i < alphabets.length; i++) {
queue.add(new Alphabet(i, alphabets[i]));
}
int index = 9;
int sum = 0;
while (!queue.isEmpty()) {
Alphabet alphabet = queue.poll();
sum += alphabet.value * index;
index--;
}
System.out.println(sum);
}
}
class Alphabet implements Comparable {
int index;
int value;
public Alphabet(int index, int value) {
this.index = index;
this.value = value;
}
@Override
public int compareTo(Object o) {
Alphabet alphabet = (Alphabet) o;
return -Integer.compare(this.value, alphabet.value);
}
}
'알고리즘 공부 > boj' 카테고리의 다른 글
boj 2417: 정수 제곱근 (0) | 2021.03.15 |
---|---|
boj 1789: 수들의 합 (1) | 2021.03.15 |
boj 2638: 치즈 (0) | 2021.02.14 |
boj 1766: 문제집 (0) | 2021.02.12 |
boj 1504:특정한 최단경로 (0) | 2021.02.07 |