알고리즘/백준

백준-1339번/단어 수학(java)

연향동큰손 2024. 7. 31. 20:13

 

 

문제 이해

 

알파벳 대문자에 각각 숫자를 대입한 결과가 최대값이 되는 경우를 구하면 되는 문제이다.

ex)   AAA                              999

+      AAA              ===>   +   999

----------------                     --------------

 

문제 해결

 

1)  알파벳의 끝부터 자릿수 구하기(1,10,100,1000 .....)

for(int i=0; i<N; i++){
    String st;
    st=scanner.nextLine();
    int v=1;
    for(int j=st.length()-1; j>=0; j--){ //자릿수 설정
        a[st.charAt(j)-'A']+=v;
        v=v*10;

    }
}

 

이 과정을 통해 각 알파벳이 어느 자리에 있는지를 파악할 수 있다.

 

 

2) 알파뱃 배열을 자릿수가 큰것부터 내림차순으로 정렬

Arrays.sort(a, Collections.reverseOrder());

 

 

3) 자리수가 큰 알파뱃부터 9를 부여하고 그 다음부터 1작은 수를 알파벳에 대입 (문자열에 없는 알파벳이 나오면 break)

int num=9;
int max=0;
for(int i=0; i<26; i++){
    if(a[i]==0){
        break;
    }
    max+=a[i]*num;
    num--;
}

 

 

<전체 코드>

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Problem1339 {
    static Integer[] a=new Integer[26];

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        scanner.nextLine();
        for (int i = 0; i < 26; i++) {
            a[i] = 0; // 초기화
        }
        for(int i=0; i<N; i++){
            String st;
            st=scanner.nextLine();
            int v=1;
            for(int j=st.length()-1; j>=0; j--){ //자릿수 설정
                a[st.charAt(j)-'A']+=v;
                v=v*10;

            }
        }
        Arrays.sort(a, Collections.reverseOrder());

        int num=9;
        int max=0;
        for(int i=0; i<26; i++){
            if(a[i]==0){
                break;
            }
            max+=a[i]*num;
            num--;
        }
        System.out.println(max);
    }
}