[문제]
출처 - https://www.acmicpc.net/problem/1339
[문제 풀이]
- 최댓값을 찾는 문제이므로. 입력으로 받은 단어의 자릿수를 만들고 각 단어의 합을 구하여 높은 값부터 대입해준다.
- EX) ABC + DEF = 100A + 10B + 1C + 100D+ 10E + 1F = 100A + 100D + 10B + 10E + 1C + 1F
- => 100A + 100D + 10B + 10E + 1C + 1F
- => A = 9 , D = 8 , B = 7 , E = 6, C = 5, F = 4
- => 1839
- 위의 과정을 코드로 구현을 하면 풀 수 있다. 자세한 건 아래 소스 코드와 주석을 함께 참고하면 된다.
[소스 코드]
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Integer[] alpha = new Integer[26]; //알파벳수만큼 배열 선언
Arrays.fill(alpha, 0);
for(int i=0; i<n; i++) {
char input[] = br.readLine().toCharArray();
int pos = 1;
for(int j = input.length -1; j>=0; j--) { //뒤에서 부터 자릿수 증가시키기
alpha[input[j] - 'A'] += Integer.valueOf(pos);
pos*=10; //자릿수 증가
}
}
//Collections.reverseOrder를 사용하기 위해서는 Integer로 배열을 선언해야 한다.
Arrays.sort(alpha, Collections.reverseOrder());
int value = 9, answer = 0;
for(int i=0; i<alpha.length; i++) {
if(alpha[i] == 0) { //더이상 계산할 단어가 없으면 종료
break;
}
answer += alpha[i] * value--;
}
System.out.println(answer);
}
}
'백준 문제풀이' 카테고리의 다른 글
[백준 1806] - 부분합(JAVA) (0) | 2021.12.31 |
---|---|
[백준 1932] - 정수 삼각형(JAVA) (0) | 2021.12.29 |
[백준 2583] - 영역 구하기(JAVA) (0) | 2021.12.26 |
[백준 14501] - 퇴사(JAVA) (0) | 2021.12.23 |
[백준 14891] - 톱니바퀴 자바(JAVA) (0) | 2021.12.22 |