on
[백준] 1339 - 단어수학
[백준] 1339 - 단어수학
[문제링크]
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); } }
결과 화면
from http://nato-blog.tistory.com/139 by ccl(S) rewrite - 2021-10-11 06:02:14