반응형

 

 

<코드>

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

int N, ans;
string s;
map<char, int> m;
vector<int> v;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> s;

		for (int j = 0; j < s.length(); j++)
			m[s[j]] += (int)pow(10, s.length() - 1 - j);
	}

	for (int i = 0; i < 26; i++)
		if (m['A' + i] != 0) 
			v.push_back(m['A' + i]);
	
	sort(v.begin(), v.end(), greater<>());

	for (int i = 0; i < v.size(); i++)
		ans += (9 - i) * v[i];

	cout << ans << '\n';

}

 

풀이 방법

 

map을 이용해 알파벳을 'KEY'로 하고 'VALUE'에 각 자릿수를 고려해서 값을 더해줍니다.

 

2
GCF
ACDEB

예를 들어 입력이 위와 같을 경우

map['A'] = 10000
map['B'] = 1
map['C'] = 1000+10
map['D'] = 100
map['E'] = 10
map['F'] = 1
map['G'] = 100

각 알파벳을 KEY로 갖는 맵의 VALUE에 값들이 저장되고 벡터에 넣어서 내림차순으로 정렬한 뒤

큰 수를 가지는 KEY부터 9로 지정해서 8,7,6... 이런 식으로 값을 부여합니다.

위의 예제에서는 'A'의 값이 10000으로 가장 크므로 'A'에 9를 부여하고
그다음 'C'가 1010으로 두번째로 크기 때문에 8을 부여합니다. 

 

 

www.acmicpc.net/problem/1339

 

1339번: 단어 수학

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

www.acmicpc.net

 

반응형

+ Recent posts