[백준 1339번 C/C++] 단어 수학
[백준 1339번 C/C++] 단어 수학
https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
해결전략
탐욕법 Greedy Algorithm 그리디 알고리즘
각 알파벳
[ 예제 ]
2
GCF
ACDEB
G=100 C=10 F=1 -> GCF = 100G + 10C + 1F
A =10000 C=1000 D=100 E=10 B=1 -> ACDEB = 10000A + 1000C + 100D + 10E + 1B
A = 10000 * 9
C = 1010 * 8
D = 100 * 7
G = 100 * 6
E = 10 * 5
F = 1 * 4
B = 1 * 3
ACDEB + GCF = 99437
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int n;
vector<string> word; // 입력 받을 단어들
map<char, int> myMap; // key: 알파벳, value: 알파벳에 대응하는 숫자
bool Compare(const pair<char, int>& a, const pair<char, int>& b)
{
return a.second > b.second;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
word.resize(n);
for(int i=0; i<n; i++){
cin >> word[i];
int m = word[i].size();
for(int j = 0; j < m; j++)
{
if (myMap.find(word[i][j]) != myMap.end())
myMap[word[i][j]] += pow(10, (m - 1) - j);
else
myMap.insert({word[i][j], pow(10, (m-1) - j)});
}
}
// myMap의 모든 요소를 벡터 v에 삽입한 후, Compare 함수를 이용해 내림차순으로 정렬
vector<pair<char, int>> v;
for(const auto& iter : myMap){
v.push_back(iter);
}
sort(v.begin(), v.end(), Compare);
//for (const auto& iter : v)
// cout << iter.first << " " << iter.second << "\n";
// 가장 큰 값을 가지는 문자부터 9부터 시작해 1씩 줄어드는 숫자를 곱하여 answer에 더한다. 이는 가장 가치가 높은 문자부터 가장 높은 숫자를 할당하는 것이다.
int answer = 0;
int number = 9;
for(int i = 0; i < v.size(); i++)
{
answer += v[i].second * number;
number--;
}
cout << answer << "\n";
return 0;
}
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 10026번 C/C++] 적록색약 (0) | 2023.12.01 |
---|---|
[백준 1744번 C/C++] 수 묶기 (0) | 2023.11.28 |
[백준 10830번 C/C++] 행렬 제곱 (0) | 2023.11.26 |
[백준 1715번 C/C++] 카드 정렬하기 (0) | 2023.11.20 |
[백준 14502번 C/C++] 연구소 (0) | 2023.11.19 |
댓글
이 글 공유하기
다른 글
-
[백준 10026번 C/C++] 적록색약
[백준 10026번 C/C++] 적록색약
2023.12.01 -
[백준 1744번 C/C++] 수 묶기
[백준 1744번 C/C++] 수 묶기
2023.11.28 -
[백준 10830번 C/C++] 행렬 제곱
[백준 10830번 C/C++] 행렬 제곱
2023.11.26 -
[백준 1715번 C/C++] 카드 정렬하기
[백준 1715번 C/C++] 카드 정렬하기
2023.11.20