무민은귀여워

[백준]1339 단어 수학 본문

IT/알고리즘

[백준]1339 단어 수학

moomini 2021. 5. 17. 23:09
반응형

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

 

1339번: 단어 수학

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

www.acmicpc.net

 

해결방법

1. A, B, C... 를 키로, 값을 정수로 하는 맵을 준비

2. 자릿수를 가중치로 하여 해당 키값에 누적으로 저장

3. 값을 기준으로 정렬하여, 앞에서 부터 9, 8, 7... 을 부여

4. 문자열을 부여한 값으로 대치하여 계산

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
typedef pair<char, int> ci;
int main()
{
int n;
cin >> n;
vector<string> v;
map<char, int> m;
for (int i = 0; i < n; i++)
{
string str;
cin >> str;
v.push_back(str);
}
for (int i = 0; i < 26; i++)
{
int temp = i + 65;
m[(char)temp] = 0;
}
for (int i = 0; i < v.size(); i++)
{
string s = v[i];
for (int j = 0; j < s.size(); j++)
{
m[s[j]] = m[s[j]] + pow(10, (s.size() - j - 1));
}
}
vector<ci> vec(m.begin(), m.end());
sort(vec.begin(), vec.end(), [](ci a, ci b) {
return a.second > b.second;
});
int num = 9;
vector<ci> vec2;
for (ci it : vec)
{
ci tci = ci(it.first, num);
vec2.push_back(tci);
it.second = num;
num--;
if (num < 0)
num = 0;
}
int result = 0;
for (int i = 0; i < n; i++)
{
string s = v[i];
for (int j = 0; j < s.size(); j++)
{
for (ci it : vec2)
{
if (it.first == s[j])
{
result = result + it.second * pow(10, s.size() - j - 1);
}
}
}
}
cout << result;
return 0;
}
반응형