문제
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
설명
각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다.
같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.
알파벳은 총 26개이므로 words 배열의 크기를 26으로 만든다.
주어진 단어에서 해당하는 알파벳 자리에 각 자릿수만큼 10의 거듭제곱을 더해준다.
int[] words = new int[26];
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < str.length(); j++) {
// 각 자릿수만큼 10의 거듭제곱을 더해준다
words[str.charAt(j) - 'A'] += (Math.pow(10, str.length() - j - 1));
}
}
words 배열을 Arrays.sort()을 이용해 정렬을 하면 오름차순으로 정렬이 된다.
정렬이 끝나면 위에서 각 자릿수만큼 10의 거듭제곱을 더해준 값이 모두 뒤에 나열되어 있을 것이다.
배열 뒤에서부터 각각의 자리에 9에서 하나씩 숫자를 줄이면서 곱한다.
Arrays.sort(words);
int answer = 0;
int num = 9;
for (int i = 25; i >= 0; i--) {
if (words[i] == 0) {
continue;
}
// 큰 수부터 9, 8, 7, ... 순서대로 붙여준다
answer += (words[i] * num);
num--;
}
전체 코드
import java.io.*;
import java.util.*;
public class Main {
static int N;
static int[] words;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
// 알파벳은 총 26개
words = new int[26];
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < str.length(); j++) {
// 각 자릿수만큼 10의 거듭제곱을 더해준다
words[str.charAt(j) - 'A'] += (Math.pow(10, str.length() - j - 1));
}
}
Arrays.sort(words);
int answer = 0;
int num = 9;
for (int i = 25; i >= 0; i--) {
if (words[i] == 0) {
continue;
}
// 큰 수부터 9, 8, 7, ... 순서대로 붙여준다
answer += (words[i] * num);
num--;
}
System.out.println(answer);
}
}
'알고리즘 > 정렬' 카테고리의 다른 글
[CS] 정렬 알고리즘 (JAVA) (0) | 2023.04.04 |
---|---|
[백준] 1920번 수 찾기 (JAVA) (0) | 2023.02.19 |
[백준] 1713번 후보 추천하기 (JAVA) (0) | 2023.02.19 |
[CS] 정렬 (JAVA) (0) | 2023.02.18 |
문제
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
설명
각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다.
같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다.
알파벳은 총 26개이므로 words 배열의 크기를 26으로 만든다.
주어진 단어에서 해당하는 알파벳 자리에 각 자릿수만큼 10의 거듭제곱을 더해준다.
int[] words = new int[26]; for (int i = 0; i < N; i++) { String str = br.readLine(); for (int j = 0; j < str.length(); j++) { // 각 자릿수만큼 10의 거듭제곱을 더해준다 words[str.charAt(j) - 'A'] += (Math.pow(10, str.length() - j - 1)); } }
words 배열을 Arrays.sort()을 이용해 정렬을 하면 오름차순으로 정렬이 된다.
정렬이 끝나면 위에서 각 자릿수만큼 10의 거듭제곱을 더해준 값이 모두 뒤에 나열되어 있을 것이다.
배열 뒤에서부터 각각의 자리에 9에서 하나씩 숫자를 줄이면서 곱한다.
Arrays.sort(words); int answer = 0; int num = 9; for (int i = 25; i >= 0; i--) { if (words[i] == 0) { continue; } // 큰 수부터 9, 8, 7, ... 순서대로 붙여준다 answer += (words[i] * num); num--; }
전체 코드
import java.io.*; import java.util.*; public class Main { static int N; static int[] words; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); // 알파벳은 총 26개 words = new int[26]; for (int i = 0; i < N; i++) { String str = br.readLine(); for (int j = 0; j < str.length(); j++) { // 각 자릿수만큼 10의 거듭제곱을 더해준다 words[str.charAt(j) - 'A'] += (Math.pow(10, str.length() - j - 1)); } } Arrays.sort(words); int answer = 0; int num = 9; for (int i = 25; i >= 0; i--) { if (words[i] == 0) { continue; } // 큰 수부터 9, 8, 7, ... 순서대로 붙여준다 answer += (words[i] * num); num--; } System.out.println(answer); } }
'알고리즘 > 정렬' 카테고리의 다른 글
[CS] 정렬 알고리즘 (JAVA) (0) | 2023.04.04 |
---|---|
[백준] 1920번 수 찾기 (JAVA) (0) | 2023.02.19 |
[백준] 1713번 후보 추천하기 (JAVA) (0) | 2023.02.19 |
[CS] 정렬 (JAVA) (0) | 2023.02.18 |