본문 바로가기

Problem Solving/BOJ 백준

[ BOJ 백준 1339번 - 단어 수학 ] 해설 및 코드

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

 

 

목적

GCF + ACDEB를 계산한다고 할 때, 합을 최대로 만들기 위해 A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다.

 

접근법

1. 각 단어의 알파벳 정보를 각 자리수를 고려하여 1*10^n의 값으로 대체하여 저장한다.

 

  • 계산 하려는 수식은 GCF + ACDEB로, 우선은 다음과 같이 사용하고자 하는 알파벳 개수 만큼의 배열을 준비한다.

 

 

  • 이제 단어를 하나씩 가지고 배열의 값을 갱신해 나간다. 첫번째 단어인 GCF에서 G,C,F 각각은 100,10,1의 자리에 위치해 있다. 다음과 같이 배열을 갱신한다.

 

 

  • 같은 방법으로, 두번째 단어인 ACDEB로 배열을 갱신하면 다음과 같다.

 

2. 모든 단어를 이용하여 배열에 값을 채워 넣었다면, 이제 배열을 정렬하여 큰 순서부터 9~1의 수를 결정해 곱하여 최종 결과 값에 모두 더해주면 된다..

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<algorithm>
using namespace std;
 
int main() {
    int n; cin >> n;
    int s['Z' + 1= {};
    while (n--) {
        string s; cin >> s;
        for (int i = s.length() - 1, j = 1; i >= 0--i, j *= 10)s[s[i]] += j;
    }
    sort(s + 'A', s + 'Z' + 1);
    int ret=0,val=10;
    for (char c = 'Z'; c >= 'A'--c)if (s[c] != 0)ret += (s[c] * (--val));
    cout << ret;
}