[백준 코딩테스트] 1339번 단어 수학

gyeol·2024년 9월 25일

코딩테스트 공부

목록 보기
35/53
post-thumbnail

내 풀이

만약 GCF가 주어지면 (100 * G) + (10 * C) + (1 * F) 와 같은 형태로 나타내면 될 것 같다는 생각이 들었다.
이렇게 되면 G=9, C=8, F=7일 때에 최대값을 구할 수 있다.

이렇게 선언된 배열을 오름차순으로 정렬 후 뒤에서부터 9, 8, 7 ... 숫자를 각각 곱해주면 주어진 수의 합을 최대로 만드는 프로그램을 작성할 수 있다.

내 코드

import java.util.*;
import java.io.*;

public class Main {
    static int n;
    static int[] alpha = new int[26];
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        n = Integer.parseInt(br.readLine());
        Arrays.fill(alpha, 0);

        for(int i=0; i<n; i++){
            String str = br.readLine(); // 입력받은 단어
            for(int j=0; j<str.length(); j++){
                char c = str.charAt(j);
                alpha[c - 'A'] += (int)Math.pow(10, str.length()-1-j);
            }
        }

        Arrays.sort(alpha); // 배열 정렬

        int num = 9; // 가장 큰 수부터 넣음
        int index = 25; // 가장 큰 자릿값을 가진 알파벳 인덱스
        int sum = 0;

        while(alpha[index] > 0){
            sum += alpha[index] * num; 
            index--; num--;
        }
        System.out.println(sum);
        
        
    }
}
profile
공부 기록 공간 '◡'

0개의 댓글