๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 1431๋ฒˆ: ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ

by nitronium102 2022. 6. 28.

๋ฌธ์ œ

๋‹ค์†œ์ด๋Š” ๊ธฐํƒ€๋ฅผ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ๊ธฐํƒ€๋Š” ๋ชจ๋‘ ๋‹ค๋ฅธ ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋‹ค์†œ์ด๋Š” ๊ธฐํƒ€๋ฅผ ๋นจ๋ฆฌ ์ฐพ์•„์„œ ๋นจ๋ฆฌ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์—ฐ์ฃผํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๊ธฐํƒ€๋ฅผ ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

๋ชจ๋“  ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ๋Š” ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž (A-Z)์™€ ์ˆซ์ž (0-9)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์‹œ๋ฆฌ์–ผ๋ฒˆํ˜ธ A๊ฐ€ ์‹œ๋ฆฌ์–ผ๋ฒˆํ˜ธ B์˜ ์•ž์— ์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. A์™€ B์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด, ์งง์€ ๊ฒƒ์ด ๋จผ์ € ์˜จ๋‹ค.
  2. ๋งŒ์•ฝ ์„œ๋กœ ๊ธธ์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด, A์˜ ๋ชจ๋“  ์ž๋ฆฌ์ˆ˜์˜ ํ•ฉ๊ณผ B์˜ ๋ชจ๋“  ์ž๋ฆฌ์ˆ˜์˜ ํ•ฉ์„ ๋น„๊ตํ•ด์„œ ์ž‘์€ ํ•ฉ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ๋จผ์ €์˜จ๋‹ค. (์ˆซ์ž์ธ ๊ฒƒ๋งŒ ๋”ํ•œ๋‹ค)
  3. ๋งŒ์•ฝ 1,2๋ฒˆ ๋‘˜ ์กฐ๊ฑด์œผ๋กœ๋„ ๋น„๊ตํ•  ์ˆ˜ ์—†์œผ๋ฉด, ์‚ฌ์ „์ˆœ์œผ๋กœ ๋น„๊ตํ•œ๋‹ค. ์ˆซ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ๋ณด๋‹ค ์‚ฌ์ „์ˆœ์œผ๋กœ ์ž‘๋‹ค.

์‹œ๋ฆฌ์–ผ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ •๋ ฌํ•ด์„œ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๊ธฐํƒ€์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 50์ด๊ณ , ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž ๋˜๋Š” ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ N๊ฐœ์˜ ์ค„์— ํ•œ์ค„์— ํ•˜๋‚˜์”ฉ ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ๋ฅผ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

isdigit๊ณผ ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ณ€ํ™˜์„ ์•Œ๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด๋‹ค.

์ฐธ๊ณ ๋กœ ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ณ€ํ™˜์„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ œ๋Š” ๋งž์•˜๋‹ค๊ณ  ๋‚˜์˜ค์ง€๋งŒ ์‹ค์ œ ์ œ์ถœ์—์„œ๋Š” ํ‹€๋ฆฌ๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int countSum(const string &s){
    int sum = 0;
    for (int i=0; i<s.size(); i++){
        if (isdigit(s[i]))
            sum += s[i] - '0'; // char->int๋กœ ๋ณ€ํ™˜ ํ•„์š”
    }
    return sum;
}

bool cmp(const string &s1, const string &s2){
    // 1. ๊ธธ์ด๊ฐ€ ์งง์€ ๊ฒƒ์ด ๋จผ์ € ์˜จ๋‹ค
    if (s1.size() != s2.size())
        return s1.size() < s2.size();
    // 2. ์„œ๋กœ ๊ธธ์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ž๋ฆฌ์ˆ˜์˜ ํ•ฉ์ด ์ž‘์€ ๊ฒƒ์ด ๋จผ์ € ๋“ค์–ด์˜จ๋‹ค
    if (countSum(s1) != countSum(s2))
        return countSum(s1) < countSum(s2);
    // 3. ์‚ฌ์ „์ˆœ ๋น„๊ต
    return s1 < s2;
}

int main(){
    int n;
    vector<string> serial_num;

    // ์ž…๋ ฅ
    cin >> n;
    serial_num.assign(n, "");
    for (int i=0; i<n; i++) {
        cin >> serial_num[i];
    }

    // ์—ฐ์‚ฐ
    sort(serial_num.begin(), serial_num.end(), cmp);

    // ์ถœ๋ ฅ
    for (int i=0; i<n; i++)
        cout << serial_num[i] << "\n";

}

๋Œ“๊ธ€