https://www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 10개이고, 수의 최대 길이는 8이다. 서로 다른 문자는 서로 다른 숫자를 나타낸다.

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;
int N;
int alphabet[26];
vector <string> number;

bool compare(int a, int b){
    if(a>b) return true;
    return false;
}

void calculate(){
    for(int i=0;i<N;i++){
        string now = number[i];
        int len = now.length();
        int pow = 1;

        for(int j=len-1;j>=0;j--){
            int tempNum = now[j] - 'A';
            alphabet[tempNum] = alphabet[tempNum] + pow;
            pow = pow *10;
        }
    }
    sort(alphabet, alphabet+26,compare);

    int result = 0;
    int number = 9;
    for(int i=0;i<26;i++){
        if(alphabet[i]==0) break;
        result = result + (alphabet[i]*number);
        number--;
    }
    cout<<result<<"\n";
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    // freopen("input.txt","r",stdin);
    
    cin>>N;
    for(int i=0;i<N;i++){
        string temp; 
        cin>>temp;
        number.push_back(temp);
    }

    calculate();

    return 0;
}

+ Recent posts