https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
GCF + ACDEB를 가장 최대로 하려면 어떻게 해야할까?
이를 위해 자리수를 이용하여 알파벳 별로 가중치를 두는 방안을 생각했다.
즉 ACDEB에서 A는 10000, C는 1000, D는 100 식으로 알파벳 별 가중치를 저장하는 것이다
이후 가중치를 기준으로 정렬하고, 가중치가 가장 큰 알파벳부터 9, 8, 7... 순서로 숫자를 부여한다.
알파벳 별로 가중치를 부여하기 위해 문자와 가중치를 저장하는 class를 만들었다.
그리고 이를 정렬하는 Arrays.sort 와 Comparator를 이용!
Comparator를 이용한 정렬은 이제 자연스럽게 사용할 수 있어야 한다.
package P1339;
import java.io.*;
import java.util.*;
public class Main {
static int N;
static String input[];
static alph[] a = new alph[26];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
input = new String[N];
for (int i = 0; i < 26; i++) {
a[i] = new alph();
}
for (int i = 0; i < N; i++) {
input[i] = br.readLine();
for (int j = 0; j < input[i].length(); j++) {
a[input[i].charAt(j) - 'A'].score += Math.pow(10, input[i].length() - j - 1);
a[input[i].charAt(j) - 'A'].al = Character.toString(input[i].charAt(j) - 'A').charAt(0);
}
}
Arrays.sort(a, new Comparator<alph>() {
@Override
public int compare(alph o1, alph o2) {
return o2.score - o1.score;
}
});
int ans = 0;
for (int i = 0; i < a.length; i++) {
ans += a[i].score * (9-i);
}
System.out.println(ans);
}
}
class alph{
int score = 0;
char al;
}
제출 결과 무난하게 정답 처리 되었다.
이후 다른 문제 해결 코드를 찾아보았는데 class를 따로 안만들고 Map을 이용하여 알파벳 별 가중치를 저장하는 것을 보았다.
확실히 getordefault를 사용하면 코드가 깔끔해질 것 같다
'백준온라인' 카테고리의 다른 글
[Java] 백준 1715 카드 정렬하기 (0) | 2021.07.20 |
---|