πŸ•οΈ ICPC Sinchon/Greedy

[BOJ G4][C++] λ°±μ€€ 1339번: 단어 μˆ˜ν•™

선달 2022. 10. 11. 03:05
λ°˜μ‘ν˜•

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

 

1339번: 단어 μˆ˜ν•™

첫째 쀄에 λ‹¨μ–΄μ˜ 개수 N(1 ≤ N ≤ 10)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 단어가 ν•œ 쀄에 ν•˜λ‚˜μ”© 주어진닀. λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ μ΄λ£¨μ–΄μ Έμžˆλ‹€. λͺ¨λ“  단어에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ•ŒνŒŒλ²³μ€ μ΅œλŒ€

www.acmicpc.net

 

문제

λ―Όμ‹μ΄λŠ” μˆ˜ν•™ν•™μ›μ—μ„œ 단어 μˆ˜ν•™ 문제λ₯Ό ν‘ΈλŠ” μˆ™μ œλ₯Ό λ°›μ•˜λ‹€.

단어 μˆ˜ν•™ λ¬Έμ œλŠ” N개의 λ‹¨μ–΄λ‘œ 이루어져 있으며, 각 λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ 이루어져 μžˆλ‹€. μ΄λ•Œ, 각 μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ₯Ό 0λΆ€ν„° 9κΉŒμ§€μ˜ 숫자 쀑 ν•˜λ‚˜λ‘œ λ°”κΏ”μ„œ N개의 수λ₯Ό ν•©ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 같은 μ•ŒνŒŒλ²³μ€ 같은 숫자둜 λ°”κΏ”μ•Ό ν•˜λ©°, 두 개 μ΄μƒμ˜ μ•ŒνŒŒλ²³μ΄ 같은 숫자둜 λ°”λ€Œμ–΄μ§€λ©΄ μ•ˆ λœλ‹€.

예λ₯Ό λ“€μ–΄, GCF + ACDEBλ₯Ό κ³„μ‚°ν•œλ‹€κ³  ν•  λ•Œ, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7둜 κ²°μ •ν•œλ‹€λ©΄, 두 수의 합은 99437이 λ˜μ–΄μ„œ μ΅œλŒ€κ°€ 될 것이닀.

N개의 단어가 μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έ 수의 합을 μ΅œλŒ€λ‘œ λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 λ‹¨μ–΄μ˜ 개수 N(1 ≤ N ≤ 10)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 단어가 ν•œ 쀄에 ν•˜λ‚˜μ”© 주어진닀. λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ μ΄λ£¨μ–΄μ Έμžˆλ‹€. λͺ¨λ“  단어에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ•ŒνŒŒλ²³μ€ μ΅œλŒ€ 10개이고, 수의 μ΅œλŒ€ κΈΈμ΄λŠ” 8이닀. μ„œλ‘œ λ‹€λ₯Έ λ¬ΈμžλŠ” μ„œλ‘œ λ‹€λ₯Έ 숫자λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

좜λ ₯

첫째 쀄에 주어진 λ‹¨μ–΄μ˜ ν•©μ˜ μ΅œλŒ“κ°’μ„ 좜λ ₯ν•œλ‹€.

 

풀이

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int solution(int n, vector<string>&word) {
    vector<int> weight(26, 0); // μ•ŒνŒŒλ²³λ“€μ˜ κ°€μ€‘μΉ˜λ₯Ό λ‹΄λŠ” 벑터
    for(int i=0; i<n; i++) {
        int length = word[i].size();
        for(int j=0; j<length; j++)
            weight[word[i][j]-'A'] += pow(10, length-1-j); // ν•΄λ‹Ή μ•ŒνŒŒλ²³μ΄ κ°€μ§€λŠ” κ°€μ€‘μΉ˜λ₯Ό 벑터에 λ„£μ–΄μ€€λ‹€
    }
    
    sort(weight.begin(), weight.end(), greater<>()); // κ°€μ€‘μΉ˜ λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
    
    int sum = 0;
    int tmp = 9;  // λ°°μ •ν•  κ°’ -> κ°€μ€‘μΉ˜κ°€ 큰 μˆœμ„œλŒ€λ‘œ λ°”λ‘œ κ³±ν•΄μ„œ λ”ν•΄μ€Œ
    for(int i=0; i<10; i++) { // μ•ŒνŒŒλ²³ μ’…λ₯˜λŠ” 10개λ₯Ό λ„˜μ§€ μ•ŠμŒ
        sum += tmp * weight[i];
        tmp--;
    }
    
    return sum;
}

int main() {
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    int n;
    cin >> n;
    vector<string> word(n);
    for(int i=0; i<n; i++)
        cin >> word[i];
 
    cout << solution(n, word);
    
    return 0;
}

/*
 */
λ°˜μ‘ν˜•