문제 이해
알파벳 대문자에 각각 숫자를 대입한 결과가 최대값이 되는 경우를 구하면 되는 문제이다.
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);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준-14225번/부분수열의 합(java) (2) | 2024.08.02 |
---|---|
백준-14888번/연산자 끼워넣기(java) (0) | 2024.08.01 |
백준-11725번/트리의 부모 찾기(java) (0) | 2024.07.31 |
백준-1991번/트리순회(java) (0) | 2024.07.29 |
백준-13913번/숨바꼭질 4(java) (0) | 2024.07.28 |