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

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

by nitronium102 2021. 9. 6.

๋ฌธ์ œ

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

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

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

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

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

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

ํ’€์ด

์กฐ๊ฑด์„ ๋ณด๋Š” ์ˆœ๊ฐ„ ๋ฐ”๋กœ sort๋ฅผ ์“ฐ๋Š” ๋ฌธ์ œ๊ตฌ๋‚˜...ํ•˜๋Š” ๊ฑธ ์•Œ์•„์•ผ ํ•œ๋‹ค!

2๋ฒˆ ์กฐ๊ฑด์ธ A์˜ ๋ชจ๋“  ์ž๋ฆฌ์ˆ˜์˜ ํ•ฉ๊ณผ B์˜ ๋ชจ๋“  ์ž๋ฆฌ์ˆ˜์˜ ํ•ฉ์„ ๋น„๊ตํ•ด์„œ ์ž‘์€ ํ•ฉ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ๋จผ์ €์˜จ๋‹ค. (์ˆซ์ž์ธ ๊ฒƒ๋งŒ ๋”ํ•œ๋‹ค)๋Š” isdigit ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•ด์ฃผ๋ฉด ์‰ฝ๋‹ค!

01. isdigit ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ํ˜•์€ boolean์ด๋‹ค
02. a์™€ b์˜ ์ž๋ฆฌ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋กœ์ง์ด ์ค‘๋ณต ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ํ•จ์ˆ˜๋กœ ๋นผ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
// 1431๋ฒˆ : ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<string> arr;

// 02-1. ๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž์ธ ์ž๋ฆฌ๋งŒ ํ•ฉํ•ด์„œ ๋ฆฌํ„ด
int findSum(string str){
    int sum = 0;
    for (int i=0; i<str.length(); i++){
        if (isdigit(str[i]) == true) // isdigit ๋ฐ˜ํ™˜ํ˜•์€ bool!
            sum += str[i] - '0';
    }
    return sum;
}

bool compare(const string &a, const string &b){
  // 01. ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์งง์€ ๊ฒƒ ์šฐ์„ 
  if (a.length() != b.length())
    return a.length() < b.length();
  
  // 02. ๊ธธ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์ž๋ฆฌ์ˆ˜ ํ•ฉ ์ž‘์€ ๊ฒƒ์ด ์šฐ์„ 
  int a_sum = findSum(a);
  int b_sum = findSum(b);
  if (a_sum != b_sum)
    return a_sum < b_sum;

  // 03. ์‚ฌ์ „์ˆœ์œผ๋กœ ๋น„๊ต
  return a < b;
}

int main(){
  int n;
  cin >> n;
  arr.assign(n, "");
  
  for (int i=0; i<n; i++){
    cin >> arr[i];
  }
  
  sort(arr.begin(), arr.end(), compare);
  
  for (int i=0; i<n; i++){
    cout << arr[i] << "\n";
  }
}

๋Œ“๊ธ€