문제
풀이
그리디
가장 큰 자리수로 많이 입력된 알파벳이 9가 되어야 하고, 다음으로 적게 입력된 알파벳이 8이 되어야 한다. 이런 순서로 알파벳을 숫자로 변환한다.
GCF가 입력되면 알파벳이 하나의 숫자라고 생각하면,
GCF = G * 100 + C * 10 + F로 표현할 수 있다.
ACDEB가 입력되면
ACDEB = A * 10000 + C * 1000 + D * 100 + E * 10 + B로 표현할 수 있다. 여기서 각 알파벳의 계수를 보면 다음과 같다.
A | 10000 |
C | 1010 |
G | 100 |
D | 100 |
E | 10 |
B | 1 |
위의 결과에서 A부터 9, B를 1로 설정하면 합은 99437이 된다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int alphabet[26];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
for (int i = 0; i < N; ++i)
{
string s;
cin >> s;
reverse(s.begin(), s.end());
// 알파벳 별로 어느 자리수로 입력되었는지 확인
for (int j = s.length() - 1; j >= 0; --j)
{
long long temp = pow(10, j);
alphabet[s[j] - 'A'] += temp;
}
}
// 내림차순 정렬
sort(alphabet, alphabet + 26, greater<>());
int answer = 0;
int current = 9;
for (int i = 0; i < 26; ++i)
{
if (alphabet[i] == 0)
{
continue;
}
answer += alphabet[i] * current;
current--;
}
cout << answer;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준][C++] 14916: 거스름돈 (0) | 2024.02.09 |
---|---|
[백준][C++] 1744: 수 묶기 (0) | 2024.02.05 |
[백준][C++] 1049: 기타줄 (0) | 2024.02.03 |
[백준][C++] 1946: 신입 사원 (0) | 2024.02.01 |
[백준][C++] 1439: 뒤집기 (0) | 2024.01.31 |