728x90
https://www.acmicpc.net/problem/1339
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int wordCnt = Integer.parseInt(br.readLine());
String[] strArr = new String[wordCnt];
Map<Character, Integer> map = new HashMap<>();
for (int i=0; i<wordCnt; i++){
String word = br.readLine();
strArr[i] = word;
//map에 자릿수를 더함
for (int j=0; j<word.length(); j++) {
double add = Math.pow(10, word.length() - j);
if (map.containsKey(word.charAt(j)))
map.put(word.charAt(j), map.get(word.charAt(j)) + (int)add);
else
map.put(word.charAt(j), (int)add);
}
}
//TreeMap을 Integer 값으로 정렬
Map<Character, Integer> sortedMap = new TreeMap<>(new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
int val = map.get(o2) - map.get(o1);
return (val == 0)?1:val;
}
});
sortedMap.putAll(map);
//문자열을 숫자로 치환
int alloc = 9;
for (Map.Entry<Character, Integer> entry : sortedMap.entrySet()) {
for (int i=0; i<strArr.length; i++)
strArr[i] = strArr[i].replace(entry.getKey().toString(), String.valueOf(alloc));
alloc --;
}
//더하고 출력
int result = 0;
for (int i=0; i<wordCnt; i++)
result += Integer.parseInt(strArr[i]);
System.out.println(result);
}
}
- Character와 Integer 해시맵 map을 만든다
- String단어를 하나 받은 후
- char를 하나씩 떼면서 자릿수에 맞는 값을 map에 저장해준다. 자릿수 값은 서로 구별되도록 10의 배수로 만들어줬다
- map을 integer값을 기준으로 내림차순 정렬하기 위해 treemap을 만들어 담는다
- integer값이 큰 char를 9로 치환시켜주고, 다음 큰 수는 8, 그다음은 7 순으로 치환해준다
- 숫자로 바뀐 string값들을 integer로 바꾸어 더하고 출력해준다
map을 정렬할 방법을 찾다가 TreeMap이라는 걸 알아냈다.
Comparator가 아직 익숙하지 않아서 조금 더 공부해야겠다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 1744 수 묶기 - 골드4 (0) | 2023.07.14 |
---|---|
[Java] 백준 1715 카드 정렬하기 - 골드4 (0) | 2023.07.14 |
[Java] 백준 1083 소트 - 골드5 (1) | 2023.07.13 |
[Java] 백준 1041 주사위 - 골드5 (0) | 2023.07.13 |
[Java] 백준 9009 피보나치 - 실버1 (0) | 2023.07.13 |