백준 1339: 단어 수학

uni.gy·2023년 5월 3일
0

알고리즘

목록 보기
2/61

문제

풀이

첫번째 풀이

가장 큰 자릿수에 있는 알파벳부터 큰 값을 지정해줬지만 반례가 존재했다.

10
ABB
BB
BB
BB
BB
BB
BB
BB
BB
BB

A: 9, B: 8 인 경우보다
B: 9 , A: 8 일 경우가 더 큰 수가 된다.

두번째 풀이

알파벳별 각 자릿수의 합을 구해 배열에 저장한 후, 배열을 내림차순 정렬을 해준다.
차례대로 9~0까지 곱해주며 합계를 구하면 정답이 된다.

ABC
BDA
두 문자열이 있으면
A : 101
B : 110
C : 1
D : 10
내림차순 정렬하여 곱하면
110*9 + 101*8 + 10*7 + 1*6

코드

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


public class Main {

    static int n;
    static Integer arr[]; // Arrays.sort 내림차순을 위해 Integer로 선언

    public static void main(String args[]) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        n=Integer.parseInt(br.readLine());
        arr=new Integer[27];
        Arrays.fill(arr,0);

        for(int i=0;i<n;i++){
            String s=br.readLine();
            for(int j=0;j<s.length();j++){
                char c=s.charAt(j);
                arr[c-'A']+=(int)Math.pow(10,s.length()-j-1);
            }
        }

        Arrays.sort(arr,(a,b)->b-a);
        int ans=0;
        int val=9;
        for(int i=0;i<27;i++){
            if(arr[i]==0)break;
            ans+=val*arr[i];
            val--;
        }
        System.out.println(ans);
    }


}

#그리디

profile
한결같이

0개의 댓글