https://www.acmicpc.net/problem/1339
풀이 생각
Main
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb;
//N 개의 단어로 이루어져 있으며, 알파벳 대문자로 이루어짐.
int N =Integer.parseInt(br.readLine());
String [] arr = new String[N];
for (int i = 0; i < N; i++) {
String str = br.readLine();
sb = new StringBuilder(str);
arr[i] = sb.reverse().toString();
}
Arrays.sort(arr, (s1,s2)-> s2.length()-s1.length());
HashMap<Character,Integer> map = new HashMap<>();
int start = arr[0].length()-1;
for (int i = start; i >=0 ; i--) {
for (int j = 0; j < N; j++) {
if(i >= arr[j].length()){
break;
}
char c = arr[j].charAt(i);
if(!map.containsKey(c)){
map.put(c, (int) Math.pow(10,i));
}else{
map.put(c,map.get(c) + (int)Math.pow(10,i));
}}}
List<Integer> list = new ArrayList<>();
Iterator<Character> it = map.keySet().iterator();
// list에 map의 value를 담음.
while (it.hasNext()) {
char c = it.next();
list.add(map.get(c));
}
// 내림차순 정렬.
Collections.sort(list, (a, b) -> b - a);
int num = 9;
int ans = 0;
for (int i = 0; i < list.size(); i++) {
ans += list.get(i) * num--;
}
// 첫 문자에 9~>0으로 할당해줘야겠네
System.out.println(ans);
}
MAP에 자릿수 값으로 거듭제곱 10씩 곱해주기
HashMap<Character,Integer> map = new HashMap<>();
int start = arr[0].length()-1;
for (int i = start; i >=0 ; i--) {
for (int j = 0; j < N; j++) {
if(i >= arr[j].length()){
break;
}
char c = arr[j].charAt(i);
if(!map.containsKey(c)){
map.put(c, (int) Math.pow(10,i));
}else{
map.put(c,map.get(c) + (int)Math.pow(10,i));
}}}
iterator 사용법
Iterator<Character> it = map.keySet().iterator();
// list에 map의 value를 담음.
while (it.hasNext()) {
char c = it.next();
list.add(map.get(c));
}
그리디 알고리즘, 더 많은 문제