https://www.acmicpc.net/problem/1339
문제의 분류는 백트래킹으로 되어 있는데 간단한 수학적 사고(?)를 통해서 문제를 풀었다.
각각의 알파벳에 자리수가 있기 때문에 우선순위가 존재한다.
예를들어, ABC가 있을 때 A=100, B=10, C=1로 치환해서 문제를 풀면 된다.
모두 대문자만 입력이 주어지기 때문에 총 26개의 값이 들어올 수 있으며
자리수에 해당하는 값으로 치환해서 각각의 알파벳에 값을 넣어주면 된다.
다음으로 알파벳에 값을 큰 순서대로 소팅한 후에, 큰 값부터 9,8,7을 곱해주는 식으로 모든 값을 더해주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <iostream> #include <string.h> #include <math.h> #include <algorithm> #include <vector> using namespace std; int main(){ int N; cin>>N; //'A'=65 int alphabet[26]={0}; string s; for(int i=0;i<N;i++){ cin>>s; for(int j=0;j<s.length();j++){ alphabet[s[j]-65]+=(int)pow(10,s.length()-j-1); } } int ans=0; vector<int> vec; //존재하는 알파벳 담는 배열 for(int i=0;i<26;i++){ if(alphabet[i]){ vec.push_back(alphabet[i]); } } int cnt=9; sort(vec.begin(),vec.end(),greater<int>()); //내림차순 정렬 for(int i=0;i<vec.size();i++){ ans+=vec[i]*(cnt--); } cout<<ans<<endl; return 0; } | cs |
'알고리즘(BOJ) > 백트래킹' 카테고리의 다른 글
백준 2210번 - 숫자판 점프 (0) | 2019.08.30 |
---|---|
백준 9207번 - 페그 솔리테어 (0) | 2019.04.13 |
백준 2023번 - 신기한 소수 (0) | 2019.03.29 |
백준 9663번 - N-Queen (2) | 2018.03.16 |