๐Ÿ•๏ธ 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;
}

/*
 */
๋ฐ˜์‘ํ˜•