[C++]백준1339번 단어 수학

1 minute read

오늘은 백준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;
}