문제 설명
풀이
수학적 해석을 이용한 문제라고 생각해서 머리를 굴려보았다.
알파벳 별로 (총 문자열길이 - 자릿수)를 알파벳 배열에 넣는다. 그러면 GCF는 각각 다음과 같이 들어간다.
G => alpha[6] = 100
C => alpha[2] = 10
F => alpha[5] = 1
이렇게 넣어서 내림차순으로 정렬한 뒤 9부터 차례대로 숫자를 대입해서 계산해주면 답이 나온다!!
코드
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//testcase 및 문자열 입력
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String [] arr = new String[n];
int [] alpha = new int[26];
for(int i=0; i<n; i++){
arr[i] = sc.next();
}
for(int i=0; i<n; i++){
int temp = (int)Math.pow(10,arr[i].length()-1);
for(int j=0; j<arr[i].length(); j++){
alpha[(int)arr[i].charAt(j)-65]+=temp;
temp /=10;
}
}
Arrays.sort(alpha);
int index = 9;
int sum =0;
for(int i=alpha.length-1; i>=0; i--){
if(alpha[i] == 0){
break;
}
sum+= alpha[i]*index;
index--;
}
System.out.println(sum);
}
}
https://www.acmicpc.net/problem/1339
'개발합시다. > JAVA 알고리즘 문제풀이' 카테고리의 다른 글
BOJ_1697 숨박꼭질 [Java] (S1) (0) | 2021.11.09 |
---|---|
BOJ_16953 A ->B [Java] (S1) (0) | 2021.11.05 |
BOJ_2178 미로탐색 [Java] (S1) (0) | 2021.11.01 |
BOJ_16948 데스나이트 [Java] (S1) (0) | 2021.10.29 |
BOJ_6603 로또 [Java] (S2) (0) | 2021.10.29 |