백준온라인

[Java] 백준 1339 단어 수학

가누's 2021. 7. 5. 21:37

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

 

1339번: 단어 수학

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

www.acmicpc.net

GCF + ACDEB를 가장 최대로 하려면 어떻게 해야할까?

이를 위해 자리수를 이용하여 알파벳 별로 가중치를 두는 방안을 생각했다. 

 

즉 ACDEB에서 A는 10000, C는 1000, D는 100 식으로 알파벳 별 가중치를 저장하는 것이다

 

이후 가중치를 기준으로 정렬하고, 가중치가 가장 큰 알파벳부터 9, 8, 7... 순서로 숫자를 부여한다.

 


알파벳 별로 가중치를 부여하기 위해 문자와 가중치를 저장하는 class를 만들었다.

그리고 이를 정렬하는 Arrays.sort 와 Comparator를 이용!

Comparator를 이용한 정렬은 이제 자연스럽게 사용할 수 있어야 한다. 

package P1339;

import java.io.*;
import java.util.*;

public class Main {

	static int N;
	static String input[];
	static alph[] a = new alph[26];
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		input = new String[N];
		
		for (int i = 0; i < 26; i++) {
			a[i] = new alph();
		}
		
		for (int i = 0; i < N; i++) {
			input[i] = br.readLine();
			for (int j = 0; j < input[i].length(); j++) {
				a[input[i].charAt(j) - 'A'].score += Math.pow(10, input[i].length() - j - 1);
				a[input[i].charAt(j) - 'A'].al = Character.toString(input[i].charAt(j) - 'A').charAt(0);  
			}
		}
		
		Arrays.sort(a, new Comparator<alph>() {
			@Override
			public int compare(alph o1, alph o2) {
				return o2.score - o1.score;
			}
		});
		
		int ans = 0;
		
		for (int i = 0; i < a.length; i++) {
			ans += a[i].score * (9-i);
		}
		System.out.println(ans);
	}
}

class alph{
	int score = 0;
	char al;
}

제출 결과 무난하게 정답 처리 되었다.

 

이후 다른 문제 해결 코드를 찾아보았는데 class를 따로 안만들고 Map을 이용하여 알파벳 별 가중치를 저장하는 것을 보았다.

확실히 getordefault를 사용하면 코드가 깔끔해질 것 같다

 

'백준온라인' 카테고리의 다른 글

[Java] 백준 1715 카드 정렬하기  (0) 2021.07.20