https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

그리디로 해결 가능한 문제입니다.

 

알파벳이 ABC 이렇게 들어오면 앞에 있는 A부터 100의자리를 부여받고, 마지막에 있는 C는 1의자리를 받습니다.

이런 점을 이용하여 int배열을 알파벳 크기만큼 선언하여 뒤에서부터 C에 1을 더하고, B에 10을 더하고 A에 100을 더하는 방식으로 하였습니다.

 

이후에 더한 배열을 정렬하여 큰 수부터 9를 부여하는 식으로 값을 더해 출력하면 됩니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static int num[] = new int[26];
    static int ans;
 
    static void func() {
        Arrays.sort(num);
        int n = 9;
        for (int i = 25; num[i] != 0; i--) {
            ans += (num[i] * n);
            n--;
        }
        
        System.out.println(ans);
    }
 
    static void input() throws Exception {
        st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
 
        while (N-- > 0) {
            int tmp = 1;
            st = new StringTokenizer(br.readLine());
            char ch[] = st.nextToken().toCharArray();
            for (int i = ch.length - 1; i >= 0; i--) {
                num[ch[i] - 'A'+= tmp;
                tmp *= 10;
            }
        }
    }
 
    public static void main(String[] args) throws Exception {
        input();
        func();
    }
}
cs

'algorithm > Greedy' 카테고리의 다른 글

boj 8980 택배  (0) 2021.02.16
boj 11000 강의실 배정  (0) 2021.02.16
boj 1931 회의실 배정  (0) 2021.02.16
boj 2839 설탕 배달  (0) 2021.02.16
boj 11399 ATM  (0) 2021.01.29

+ Recent posts