[백준] 1339번 단어 수학 JAVA 풀이

권용환·2021년 10월 5일
0

백준

목록 보기
18/36
post-thumbnail

나의 풀이

그리디를 활용하는 문제를 더 많이 풀어봐야겠다고 느꼈다.

풀이 방법은 map에 각 문자의 자리수만큼을 계속 더한다. 예를 들어, 문자 'B' 가 십의 자리에 1번, 만의 자리에 2번 나왔다면 map에서는 ('B', 20010) 이 들어있도록 해준다.

그 map의 entryset을 linkedlist에 넣어주고 value 값으로 내림차순 정렬을 해주고, 순서대로 9부터 곱해준 값을 차례로 sum에 더해주면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;

class Main {

    static Map<Character, Integer> map = new HashMap<>();

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        while (n-- > 0) {
            char[] chars = br.readLine().toCharArray();
            for (int i = chars.length - 1; i >= 0; i--) {
                map.put(chars[i],
                    map.getOrDefault(chars[i], 0) + (int) Math.pow(10, chars.length - 1 - i));
            }
        }

        int num = 9;
        int sum = 0;
        LinkedList<Entry<Character, Integer>> list = new LinkedList<>(map.entrySet());
        list.sort(Map.Entry.comparingByValue());
        Collections.reverse(list);
        for (Entry<Character, Integer> entry : list) {
            sum += entry.getValue() * num;
            num -= 1;
        }

        System.out.println(sum);
    }
}
profile
마구 낙서하는 블로그입니다

0개의 댓글