티스토리 뷰
순열을 이용해 해결할 수 있는 문제다
기억해야할건 순열을 쓰기전에 정렬시키고 사용해야 한다는 것!
그걸 잊고있다가 오랜시간이 걸렸당..
사용되는 알파벳을 찾아두고 순열로 점수를 매겨서 최댓값을 찾아보면 된다!
소스코드
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 <algorithm>
#include <map>
#include <string>
#include <cstring>
using namespace std;
int n;
int a[11],b[111];
bool c[30];
string sa[11];
int main(){
scanf(" %d",&n);
for(int i=0;i<n;i++){
cin>>sa[i];
for(int j=0;j<sa[i].size();j++){
c[sa[i][j]-'A']=true;
}
}
int p=0;
int ans=0;
for(int i=0;i<10;i++) a[i]=i;
for(int i=0;i<26;i++) if(c[i]) a[p++] = i+'A';
sort(a,a+10);
do{
int t=0;
for(int i=0;i<10;i++) b[a[i]] =i;
for(int i=0;i<n;i++){
int temp =0;
for(int j=0;j<sa[i].size();j++){
temp*=10;
temp+=b[sa[i][j]];
}
t+=temp;
}
ans = max(ans,t);
}while(next_permutation(a,a+10));
printf("%d\n",ans);
}
|
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 1248 맞춰봐 (0) | 2020.01.26 |
---|---|
[백준] 9663 N-Queen (0) | 2020.01.26 |
[백준] 2529 부등호 (0) | 2020.01.25 |
[백준] 14002 가장 긴 증가하는 부분 수열 4 (0) | 2020.01.25 |
[백준] 15990 1,2,3 더하기 5 (0) | 2020.01.24 |
댓글