Algorithm

[백준] 단어 수학 1339번 (Java)

salmon16 2024. 4. 11. 20:04

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

 

1339번: 단어 수학

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

www.acmicpc.net

풀이 방법

그리디로 풀어야 한다. 

가장 큰 수를 만들기 위해 각 알파벳 자릿수를 계산해서 큰 거부터 9를 할당해 주면 된다.

알바벳을 계산할 때 제일 왼쪽부터 10을 곱하면서 계산하면 된다.

 

import java.io.*;
import java.util.*;
public class Main {
    static int N;    
    static int[] alphabet = new int[26]; 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String inputStr;
        N = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            inputStr = br.readLine();
            int temp = 1;
            for (int j = inputStr.length()-1; j >= 0 ; j--) {
                char c = inputStr.charAt(j);
                alphabet[c-'A'] += temp; //알파벳이 발생하면 더해준다.
                temp = temp*10;
            }
        }
        Arrays.sort(alphabet); // 내림차순으로 정렬
        int ans = 0;
        int num = 9;
        for (int i = 25;i > 0;i--) {
            if(alphabet[i] == 0) { // 0이면 포함되지 않았음
                break;
            }
            ans += alphabet[i] * num; //9부터 할당해 주기
            num--;
        }

        System.out.print(ans);
    }
}