문제출처 : https://www.acmicpc.net/problem/1339
code
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N, i, j, max, index, result = 0;
int alpha[26] = { 0 }, value[26] = { 0 };
string word[10];
cin >> N;
for (i = 0; i < N; i++)
cin >> word[i];
for (i = 0; i < N; i++)
for (j = 0; j < word[i].length(); j++)
alpha[word[i][j] - 'A'] += pow(10, word[i].length() - 1 - j);
for (j = 9; j >= 0; j--)
{
max = 0;
index = -1;
for (i = 0; i < 26; i++)
{
if (max < alpha[i] && value[i] == 0)
{
max = alpha[i];
index = i;
}
}
if (index >= 0)
value[index] = j;
}
for (i = 0; i < 26; i++)
{
if (alpha[i] != 0)
{
result += alpha[i] * value[i];
}
}
cout << result;
return 0;
}
브루트포스알고리즘으로 풀었다.
ㅈㄴ 무식하게 풀었다는 뜻이다.
우선 자릿수에 따라 알파벳배열에 값을 더해준다.
예를들어
2
GCF
ACDEB이면
A = 10000
B = 1
C = 1001
D = 100
E = 10
F = 1
이런식으로 값을 매기고, 값이큰순서대로 9,8,7,6,5,...를 매겨주면된다.
그리고 A9+C8+D*7.....이런식으로 곱해주면된다.