Java

[백준 1339] 단어 수학 (JAVA)

iheeeee6-6 2023. 8. 8. 23:01
728x90

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

 

1339번: 단어 수학

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

www.acmicpc.net

 

난이도 : 골드4

 

그리디 알고리즘 문제로, 

1. 알파벳별의 배열을 생성하여 A~Z를 0~25의 인덱스로 가정한다!

알파벳의 자릿수에 따른 값을 배열에 넣는다!

ex) ABC

첫번째 A는 알파벳 배열의 0번째에 해당한다. 100자리의 수이기에 알파벳배열에 +100

두번째 B는 알파벳 배열의 1번째, 10의 자릿수이기에 +10

세번째 C는 알파벳 배열의 2번째, 1의 자리이기에 +1

이렇게 알파벳 배열에 자릿수에 따른 값을 다 세팅한다.

 

2. 정렬을 하고, 값이 큰 알파벳부터 9를 곱하여 최종값에 더한다.!!

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		
		int[] score = new int[26];
		
		for (int i = 0; i < n; i++) {
			char[] c = br.readLine().toCharArray();
			for (int j = 0; j < c.length; j++) {
				score[c[j] - 65]+=Math.pow(10,c.length -j-1);
			}
		}
		
		int result=0;
		int num=9;
		Arrays.sort(score);
		for(int i=25;i>=0;i--) {
			if(score[i]==0) break;
			result+=score[i]*num;
			num--;
		}
		
		System.out.println(result);
	}

}