#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int N=0;
int Result(0);
int arr[100] = { 0, };//알파벳 담는 배열입니다.
cin >> N;
for (int i = 0; i < N; i++)
{
string sTemp;
cin >> sTemp;
int iTemp=1;
for (int i = sTemp.size() - 1; i >= 0; i--)
{
arr[sTemp[i] - 'A'] += iTemp;
iTemp *= 10;
}
}
sort(arr, arr+100, [](int a, int b) {
return a > b;
});//내림차순 정렬
for (int i = 0; i < 10; i++)
{
Result += arr[i] * (9 - i);
}
cout << Result;
}
이문제의 idea가
최대합을 구하는 내용에서,
for (int i = 0; i < N; i++)
{
string sTemp;
cin >> sTemp;
int iTemp=1;
for (int i = sTemp.size() - 1; i >= 0; i--)
{
arr[sTemp[i] - 'A'] += iTemp;
iTemp *= 10;
}
}
이부분은 단어가 들어오고, 뒤에서부터 1씩 채워서 가장 큰 숫자에는 가장 높은 숫자를 배분하는 형식이다.
for (int i = 0; i < N; i++)반복문 만큼 돌아가는데, arr[]배열에서 추가적으로 더해지게 된다.
이렇게 구해진 다음
sort()내림차순을 통해
for (int i = 0; i < 10; i++)
{
Result += arr[i] * (9 - i);
}
논리를 통해서 가장 큰 최대값을 구하게 된다.