문제
코드
맞았습니다가 뜬 코드입니다. - 메모리 14296KB | 시간 132ms | 코드 길이 1049B
import java.io.*;
import java.util.*;
public class Main {
private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int[] alphabet = new int[26];
for(int i = 0 ; i < n ; i++) {
int cnt = 0;
StringTokenizer st_alphabet = new StringTokenizer(bf.readLine());
String str = st_alphabet.nextToken();
cnt = str.length();
for(int j = 0 ; j < str.length() ; j++) {
char ch = str.charAt(j);
alphabet[ch - 65] += (int) (Math.pow(10, cnt--)/10);
}
}
Arrays.sort(alphabet);
int ans = 0;
int s = 9;
for(int i = alphabet.length - 1 ; i >= 0 ; i--) {
if(alphabet[i] == 0) {
break;
}
ans += (s--) * alphabet[i];
}
bw.write(Integer.toString(ans));
bf.close();
bw.flush();
bw.close();
}
}
str에 문자열을 입력받고, 문자열 첫번째 문자부터 순서대로 10에 문자열의 길이(실행 할 시에 1씩 빼어줌)를 제곱한 수를 해당 문자의 배열(alphabet배열)에 더해주었습니다. 그리고 10을 다시 나누어 문자열에 맞는 제곱수로 바꾸어줍니다. 만약 ABC이면 A는 1000이 들어가게 되는데, 100을 넣는다는 말입니다. 왜냐하면 ABC가 A = 9 , B = 8 , C = 7 이라고 한다면, ABC는 987이라는 수가 되어야하기 때문에 9 * 1000이 아니라 9*100이 되어야 한다는 말입니다.
for(int i = 0 ; i < n ; i++) {
int cnt = 0;
StringTokenizer st_alphabet = new StringTokenizer(bf.readLine());
String str = st_alphabet.nextToken();
cnt = str.length();
for(int j = 0 ; j < str.length() ; j++) {
char ch = str.charAt(j);
alphabet[ch - 65] += (int) (Math.pow(10, cnt--)/10);
}
}
만약 ACDFB를 입력받았다고 한다면,
A = 100000 / 10 = 10000 이 들어가게 되고
C = 10000 / 10 = 1000 이, D = 1000 / 10 = 100 이, F = 100 / 10 = 10, B = 1 이 들어가게 되겠죠?
그리고 이 수행을 입력받는 n회 동안에 하여 alphabet 배열 각 알파벳에 해당하는 인덱스에 누적해줍니다.
그럼 가장 큰 값이 있고, 두번째로 큰값, 같은 값 등등을 알 수 있겠죠?
어차피 다 더하니까 같은 값에 대한 것은 생략하기로 하고, 큰 값을 순차적으로 알아내기 위해 Arrays.sort(alphabet) 함수를 통해 정렬해줍니다.
int ans = 0;
int s = 9;
for(int i = alphabet.length - 1 ; i >= 0 ; i--) {
if(alphabet[i] == 0) {
break;
}
ans += (s--) * alphabet[i];
}
bw.write(Integer.toString(ans));
그리고 순서대로 9부터 곱하여 ans값에 누적해줍니다.
'코딩테스트' 카테고리의 다른 글
[백준] 2064번 'IP 주소' - Java (1) | 2023.07.10 |
---|---|
[백준] 11404번 '플로이드' - Java (1) | 2023.07.09 |
[백준] 24391번 '귀찮은 해강이' - Java (4) | 2023.07.07 |
[백준] 16562번 '친구비' - Java (2) | 2023.07.06 |
[백준] 12865번 '평범한 배낭' - Java (2) | 2023.07.05 |