본문 바로가기

알고리즘

[백준] 1339번 단어 수학 C++ 문제풀이

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

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

문제 풀이

맨 처음에는 자릿수마다의 알파벳을 저장해 완탐형식으로 하려 했는데 잘되지 않았다.

그래서 알파벳 별로 자릿수들의 합을 이용해 문제를 해결했다

예를 들어 1번 예시인 AAA, AAA  인 경우에는 alpha[0] = 222가 들어가는 형식이다.

아무튼 이런 방법으로 합이 큰 값들부터 정렬해서 9부터 차례로 곱해주었다.

 

소스코드

#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;

int alpha[26] = { 0 };

bool compare(int a, int b) {
	if (a > b) 
		return true;
	else
		return false;
}

int main() {
	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		string a;
		cin >> a;
		for (int j = 0; j < a.size(); j++) {
			int idx = a[j] - 'A';
			alpha[idx] += pow(10, a.size() - j - 1);
		}
	}

	sort(alpha, alpha + 26, compare);

	int result = 0;
	int num = 9;
	for (int j = 0; j <= 9; j++) {
		result += num * alpha[j];
		num--;
	}
	cout << result << '\n';
}