백준 알고리즘 1339번
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
1339번
입력으로 첫 줄에는 단어의 개수 N이 들어오고 그 다음 N줄에 걸쳐 알파벳 대문자로 이루어진 단어가 주어진다.
출력은 N개의 단어를 숫자로 만들었을 때, 그 수의 합의 최대를 출력한다.
(단어를 숫자로 만드는 방법은 각 알파벳을 하나의 숫자로 치환하는 것이다.)
문제 해결
처음에는 가장 높은 자릿수에 오는 알파벳에 가장 큰 숫자를 부여하는 방식으로 풀었다.
그랬더니
2
AB
BB
이런 케이스에 대해 정답을 구하지 못했다.
그래서 단어에서 알파벳의 위치를 자릿수로 만들어서 알파벳의 숫자를 저장해뒀다.
2
AB
BB
가 들어왔다고 하면
A 10
B 12
이런 식으로 저장했다.
그러면 A보다 B가 크기 때문에 B를 9로 하고 A를 8로 하면 된다.
코드
package bj1339;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PriorityQueue<Integer> pq = new PriorityQueue<>();
String str = br.readLine();
int n = Integer.parseInt(str);
int[] alpha = new int[26];
for (int i = 0; i < 26; i++) {
alpha[i] = 0;
}
for (int i = 0; i < n; i++) {
str = br.readLine();
int len = str.length();
for (int j = 0; j < len; j++) {
alpha[str.charAt(j) - 'A'] += Math.pow(10, len - j - 1);
}
}
for (int i = 0; i < 26; i++) {
if (alpha[i] == 0)
continue;
pq.add((-1) * alpha[i]);
}
int idx = 9;
int answer = 0;
while (!pq.isEmpty()) {
int a = (-1) * pq.poll();
answer += a * idx;
idx--;
}
System.out.println(answer);
}
}
결과
728x90
'Algorithm' 카테고리의 다른 글
백준 17269번 <이름궁합 테스트> (0) | 2022.01.18 |
---|---|
백준 16398번 <행성연결> (0) | 2021.12.22 |
백준 1655번 <가운데를 말해요> (0) | 2021.12.18 |
[프로그래머스] 섬 연결하기 (0) | 2021.11.24 |
[프로그래머스] N으로 표현 (0) | 2021.11.23 |
댓글