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();
    }
}