[문제링크]

 

1339번: 단어 수학

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

www.acmicpc.net

 

0. 각 알파벳의 총 크기를 구해, 그리디하게 숫자를 부여한다

  • ex) AB, BC의 경우, A는 10의자리에 1번 나오니 10, B는 11, C는 1
  • B가 가장 크므로 9, 그다음인 A에 8, C에 7을 주는 식

 

1. 모든 수에 대해 알파벳별로 등장 자릿수에 따라 값을 누적시킨다

 

2. 종료시 내림차순 정렬, 값이 큰 순으로 9~0까지 값을 부여하며 진행한다

  • 알파벳이 10개 이하로 존재하여도, tmp배열의 초깃값이 0이므로 문제 없음

 

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

public class Main{
	public static void main(String[] args)throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Integer[] tmp = new Integer[26];
		int N = pint(br.readLine());
		int num=9, sum=0;
		for (int i=0; i<26; i++)tmp[i]=0;
		for (int i = 0; i < N; i++) {
			String s = br.readLine();
			for (int j = 0; j < s.length(); j++)tmp[s.charAt(j)-'A']+= (int)Math.pow(10, s.length()-j-1);		
		}
		Arrays.sort(tmp, Comparator.reverseOrder());
		for (int i = 0; i < 10; i++)sum+=tmp[i]*num--;
		System.out.println(sum);
	}
	static int pint(String s) {
		return Integer.parseInt(s);
	}
}

결과 화면

+ Recent posts