PS/백준

21314 - 민겸 수

Mingi Kim 2025. 3. 12. 12:24

문제

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

느낀점

구현 기본 문제, 문자열은 더하기가 파이썬처럼 안된다.. append함수를 사용하자. 로직은 생각보다 쉬웠던 것 같은데, 엣지케이스를 조심해야할 듯. 그리디로 푸는 방법도 한 번 보면 좋을 것 같은데.. 귀찮..

풀이

#include <cmath>
#include <iostream>
#include <string>

using namespace std;

string calcMax(string s)
{
    string answer = "";
    int mCount = 0;
    for (size_t i = 0; i < s.size(); i++)
    {
        if (s[i] == 'M')
        {
            mCount++;
        }
        else
        {
            if (mCount > 0)
            {
                answer += '5';
                answer.append(mCount, '0');
                mCount = 0;
            }
            else
            {
                answer += '5';
            }
        }
    }
    if (mCount > 0)
    {
        answer.append(mCount, '1');
    }

    return answer;
}

string calcMin(string s)
{
    string answer = "";
    int mCount = 0;
    for (size_t i = 0; i < s.size(); i++)
    {
        if (s[i] == 'M')
        {
            mCount++;
        }
        else
        {
            if (mCount > 0)
            {
                answer.append(1, '1');
                answer.append(mCount - 1, '0');
                answer += '5';
                mCount = 0;
            }
            else
            {
                answer += '5';
            }
        }
    }
    if (mCount > 0)
    {
        answer.append(1, '1');
        answer.append(mCount - 1, '0');
    }

    return answer;
}

int main()
{
    string s;
    cin >> s;
    string maxS = calcMax(s);
    string minS = calcMin(s);
    cout << maxS << "\n";
    cout << minS;

    return 0;
}