백준 1339번 - 단어 수학

장근영·2024년 8월 5일
0

BOJ - 그리디

목록 보기
13/35

문제

백준 1339번 - 단어 수학


아이디어

  • 현재 선택이 가장 최선의 선택이라고 보는 그리디 관점에서 생각해본다.
  • 각 알파벳의 가중치, 즉 자릿수가 높을수록 높은 숫자를 받는 것이 유리하다.
  • 각 단어의 각 알파벳별로 자릿수의 합을 구한 다음, 높은 자릿수부터 높은 숫자를 할당하여 누적합을 구해준다.

예상 시간 복잡도

  • 단어별로 단어의 길이만큼 가중치를 계산하는 로직이 가장 오래 걸릴 것이다.
  • 예상 시간 복잡도 : O(N * 수의 길이)

코드 구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        String[] words = new String[n];

        for (int i = 0; i < n; i++) {
            words[i] = br.readLine();
        }

        int[] alphaWeight = new int[26]; //알파벳별 가중치

        for (String word : words) {

            int len = word.length();

            for (int i = 0; i < len; i++) {
                char ch = word.charAt(i);

                alphaWeight[ch - 'A'] += (int) Math.pow(10, len - i - 1); //해당 자릿수가 몇 번 나오는지 계산
            }
        }

        Arrays.sort(alphaWeight);

        int num = 9;
        int result = 0;

        for (int i = 25; i >= 0; i--) {
            
            if (alphaWeight[i] == 0) { 
                break;
            }

            result += alphaWeight[i] * num--; //높은 자릿수부터 높은 숫자를 할당하여 누적합 계산
        }

        System.out.println(result);
    }
}

profile
오늘 할 일을 내일로 미루지 말자.

0개의 댓글