[C++]백준1339번 단어 수학
오늘은 백준1339번 단어 수학 문제를 풀어보도록 하자.
문제는 다음과 같다.
[접근법]
1. 만일 AAA라고 하면 식으로 100A + 10A + A로 표현할 수 있다.
2. AAA와 BCC를 더한다면 100A + 10A + A와 100B + 10C + C를 더하는 것과 같고 alpha[26] 배열에 A는 alpha[A-'A']에 저장이 된다.
B는 alpha[B-'A']에 저장이 된다. 따라서 alpha[0] = 111, alpha[1] = 100, alpha[2] = 11이 저장이 된다.
3. 또 하나 처리해야할 것은 값이 큰 순으로 내림차순 정렬을 해야 한다는 것이다. 왜냐하면 큰 값에 큰 수를 곱해야 최대 값이 나오기 때문이다.
위의 예시를 들면 111 * 9 + 100 * 8 + 11 * 7이 최댓값이 되는 것이다.
[코드]
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
vector<string>v;
int alpha[26];
int N, result = 0, expo = 9;
bool cmp(int a, int b) {
if (a > b) {
return true;
}
return false;
}
void calculation() {
for (int i = 0; i < N; i++) {
string tmp = v[i];
int num = 0;
for (int j = v[i].length() - 1; j >= 0; j--) {
alpha[v[i][j] - 'A'] += pow(10, num);
num++;
}
}
}
int main() {
string s;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> s;
v.push_back(s);
}
calculation();
sort(alpha, alpha + 26, cmp);
for (int i = 0; i < 26; i++) {
if (alpha[i] != 0) {
result += alpha[i] * expo;
expo--;
}
}
cout << result << '\n';
return 0;
}