본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1339 단어 수학

by 까망 하르방 2021. 2. 20.
반응형

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

 Input 

2

AAA

AAA

  

 Output 

1998 

A와 B 중 어떤 알파벳에 9를 부여할 지 고민해보아야 합니다.

 Input 

2

ABC

BCD

 

 Output 

1866

ABC → 100A + 10B + C

BCD → 100B + 10C + D

▶ ABC + BCD = 100A + 110B + 10C + D

A, B, C, D를 미지수로 생각하고 계수를 기준으로 정렬하며 다음과 같습니다.

110B + 100A +  10C + D → B = 9, A = 8, C = 7, D = 6

 

대문자 알파벳 26개가 존재하므로 다음과 같이 설정

int alphabet[26] = 알파벳 계수

ex) ABC + BCD = 100A + 110B + 10C + D

       alphabet[0] = 100, alphabet[1] = 110, alphabet[2] = 10, alphabet[3] = 1

alphabet[] 배열을 원소값 = 0을 제외하고 원소를 내림차순으로 배열하면 다음과 같다.

▶ alphabet[] = {110 , 100, 10, 1} ← 여기에 9 ~0까지 순서대로 배정하여 합을 구합니다.


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
 
int N, idx, len, factor, answer;
int alphabet[26];
string str;
vector<string> vec;
 
bool cmp(int A, int B){
    if (A > B) return true;
    return false;
}
 
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    for (int i = 0; i < N; i++){
        cin >> str;
        vec.push_back(str);
    }
 
    for (int i = 0; i < N; i++){
        str = vec[i];
        len = str.length();
        factor = 1;
        for (int j = len - 1; j >= 0; j--){
            idx = str[j] - 'A';    
            alphabet[idx] = alphabet[idx] + factor;
            factor = factor * 10;
        }
    }
 
    // 내림차순 정렬
    sort(alphabet, alphabet + 26, cmp);
    
    int num = 9;
    for (int i = 0; i < 26; i++){
        // 계수가 큰 알파벳부터 차례대로 높은 숫자 부여
        if (alphabet[i] == 0) break;
        answer = answer + (alphabet[i] * num);
        num--;
    }
 
    cout << answer << endl;
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1987 알파벳  (0) 2021.02.20
[BOJ] 백준 3987 보이저 1호  (0) 2021.02.20
[BOJ] 백준 5585 거스름돈  (0) 2021.02.20
[BOJ] 백준 3053 택시 기하학  (0) 2021.02.20
[BOJ] 백준 14916 거스름돈  (0) 2021.02.20

댓글