Greedy Algorithm

๋ฌธ์ œ


์–ด๋Š ๋‚ , ๋ฏธ๋ฅด์ฝ”๋Š” ์šฐ์—ฐํžˆ ๊ธธ๊ฑฐ๋ฆฌ์—์„œ ์–‘์ˆ˜ N์„ ๋ณด์•˜๋‹ค. ๋ฏธ๋ฅด์ฝ”๋Š” 30์ด๋ž€ ์ˆ˜๋ฅผ ์กด๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋Š” ๊ธธ๊ฑฐ๋ฆฌ์—์„œ ์ฐพ์€ ์ˆ˜์— ํฌํ•จ๋œ ์ˆซ์ž๋“ค์„ ์„ž์–ด 30์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•œ๋‹ค.

๋ฏธ๋ฅด์ฝ”๋ฅผ ๋„์™€ ๊ทธ๊ฐ€ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

ํ’€์ด


30์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

  1. 0์ด ์กด์žฌํ•ด์•ผํ•จ
  2. ๊ฐ ์ž๋ฆฌ์˜ ์ˆซ์ž ํ•ฉ์ด 3์˜ ๋ฐฐ์ˆ˜์—ฌ์•ผํ•จ
  • long long์œผ๋กœ๋„ ํ‘œํ˜„ ๋ชปํ•˜๋ฏ€๋กœ string์œผ๋กœ ํ’€์–ด์•ผํ•จ!
  • string์—์„œ find๋ฅผ ์“ธ ๋•Œ ์กด์žฌํ•˜์ง€์•Š์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜
  • string์„ int๋กœ ๋ณ€ํ™˜ํ•  ๋• **stoi**, char์„ int๋กœ ๋ณ€ํ™˜ํ•  ๋• **-'0'**

์ฝ”๋“œ


์‚ฌ์šฉ์–ธ์–ด: C++

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string>
using namespace std;

string solution(string s)
{
    int sum = 0;
    if (s.find("0") == -1)
        return "-1";
    else
    {
        for (int i = 0; i < s.length(); i++)
        {
            sum += s[i] - '0';
        }
        if (sum % 3 == 0)
        {
            sort(s.begin(), s.end(), greater<int>());
            return s;
        }
        else
            return "-1";
    }
}
int main()
{
    string input;
    cin >> input;
    cout << solution(input) << endl;
    return 0;
}