백준 문제풀이(JAVA,Python)
1339 단어수학
공부절대안함
2021. 2. 22. 21:16
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
1.접근
각 알파벳에 자리수를 곱해서 가장 큰 값부터 9를 할당해서 문제를 푸는 그리디 문제이다
2.풀이
알파벳을 한줄 씩 입력받을 때 마다 자릿 수를 곱해서 Map에 저장한다.
예를들면 ABC는 A에 100, B에 10, C에 1을 더하는 것이다.
이렇게 map을 만들고 value값이 가장 큰 순으로 정렬해서 9부터 1씩 줄여가며 곱해서 답을 출력한다.
3.코드
4.배운점
(1)Map에서 value값에 따라 정렬하는 방법
기존 정렬 방식과 다른 value값을 통한 정렬이므로 Map의 keySet을 ArrayList로 만들고
그 ArrayList를 새로운 Comparator을 선언하여 compare메서드를 override해주었다.
value값이므로 M.get(o1).compareTo(M.get(o2))로 정의하면 오름차순
M.get(o2).compareTo(M.get(o1))로 정의하면 내림차순이 된다.(이 문제에서는 내림차순)
(1)Math.pow()를 통해서 거듭제곱을 나타낼 수 있다.
pow(2,5)=32.0 ==>2^5 (double 형으로 나온다)