[JAVA/백준] SW 역량 테스트 준비-연습 | 브루트 포스: 단어 수학

👀 문제

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

👊 도전

1. 설계

  1. 수학적으로 접근하여 문제를 해결한다.
  2. ABC=100A+10B+C이므로 아스키코드를 이용하여 각 알파벳별 인덱스에 해당 weight를 모두 더해준다.
  3. Array.sort()로 오름차순 정렬 후 뒤에서부터 확인하며 가장 큰 숫자를 부여한다.

2. 구현 (성공 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Arrays;
import java.util.Scanner;
/**
 * @author HEESOO
 *
 */
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int[] alpha=new int[26];
		for(int i=0;i<n;i++) {
			char[] array=scan.next().toCharArray();
			int p=(int)Math.pow(10, array.length-1);
			for(char ch:array) {
				alpha[ch-'A']+=p;
				p/=10;
			}
		}
		
		Arrays.sort(alpha);
		
		int answer=0, num=9;
		for(int i=alpha.length-1;i>=0;i--) {
			if(alpha[i]==0) break;
			answer+=alpha[i]*num;
			num--;
		}
		
		System.out.println(answer);
	}
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 단어를 숫자 형태로 변환한다
    • AAA=100A+10A+1A와 같이 바꿀 수 있다.
  2. 아스키코드를 이용한다
    • 아스키코드를 이용하기 위해 char형 배열을 선언한 후, 각 알파벳별 부여된 숫자를 더해 합을 계산한다.
    • 계산이 끝난 alpha를 오름차순으로 정렬한 후, 뒤에서 부터 인덱스를 확인하며 큰 숫자 9부터 하나씩 부여해 최종 답(answer)을 계산한다.

👏 해결 완료!

참고