Algorithm

[BFS] 백준-1339 단어 수학 골드4

차노도리 2023. 4. 9. 14:47

백준-1339 : 단어 수학

 

https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

 

풀의

  • 입력받은 단어를 입력받은 알파벳들을 알파벳 별로 얼마나 입력 받았는지 기록한다.
  • 우선 순위 큐에 넣은 뒤 큰 값부터 꺼내어 가중치를 9부터 1씩 줄이면 곱해준다.

 

코드 (java)

import java.util.*;

public class Baejoon1339 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        sc.nextLine(); // 버퍼 비우기

        int result = 0;
        int weight = 9;

        HashMap<Character, Integer> alphMap = new HashMap<>();

        for (int i = 0; i < n; i++) {
            String tempStr = sc.nextLine();
            int power = -1;

            // 입력 받은값들 채워넣기
            for (int j = tempStr.length() - 1; j >= 0; j--) {
                alphMap.put(tempStr.charAt(j), alphMap.getOrDefault(tempStr.charAt(j), 0) + power);
                power *= 10;
            }
        }

        PriorityQueue<Integer> heap = new PriorityQueue<>();

        // 정렬하기
        for (Character key : alphMap.keySet()) {
            heap.add(alphMap.get(key));
        }

        // 나온순서대로 순서대로 곱해주기
        while (!heap.isEmpty()) {
            result += -heap.poll() * weight--;
        }

        System.out.println(result);

    }
}