JAVA/Coding Test
[JAVA] 백준 1339 단어수학_Map
오늘도개발
2024. 8. 12. 19:59
문제 :
https://www.acmicpc.net/problem/1339
접근 :
- 받은 문자열을 숫자의 형태로 Map 에 저장한다 key 는 문자1개에 해당하고, 값은 자리수를 곱한 값이다.
EX>
2
GCF
ACDEB
--------- 위 입력에 대한 결과 ---------------
A : 10000
B : 1
C : 1010
D : 100
E : 10
F : 1
G : 100
- Map 을 value 를 기준으로 내림차순으로 정렬한 후 9에서 부터 1씩 감소시키면서 곱하면서 모두 더한다.
EX >
90000
8080
700
600
50
4
3
ans = 99437
코드 구현 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<Character,Integer> alpha_map = new HashMap<>();
int t = Integer.parseInt(br.readLine());
String input_str;
for(int i = 0 ; i < t ; i++) {
input_str = br.readLine();
for (int j = 0; j < input_str.length(); j++) {
int val = (int) Math.pow(10, input_str.length()-j-1);
alpha_map.put(input_str.charAt(j), val + alpha_map.getOrDefault(input_str.charAt(j), 0));
}
}
int cnt = 9;
long ans = 0;
for(int val : alpha_map.values().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList())) {
ans += (long) val * cnt--;
}
System.out.println(ans);
br.close();
}
}