본문 바로가기

Coding Test

백준 21314 민겸 수

 

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

 

#include <iostream>
#include <vector>

using namespace std;

int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string s;

    cin >> s;

    vector<char> ans;


    //최댓값 연산
    int mcnt = 0;
    int kcnt = 0;

    for (int i = 0; i < s.size(); i++) {

        if (s[i] == 'M') {
            mcnt++;
        } else if (s[i] == 'K') {
            kcnt++;
        }

        if (kcnt != 0) {
            ans.push_back('5');

            for (int j = 0; j < mcnt; j++) {
                ans.push_back('0');
            }

            mcnt = 0;
            kcnt = 0;
        }


    }

    //아직 적지 않은 M 값이 남아있다면(K값은 반복문에서 모두 처리됨)
    if (mcnt != 0) {
        while (mcnt > 0) {
            ans.push_back('1');
            mcnt--;

        }

    }

    for (int i = 0; i < ans.size(); i++) {
        cout << ans[i];
    }
    cout << '\n';


    //최솟값 연산
    ans.clear();
    mcnt = 0;
    kcnt = 0;

    for (int i = 0; i < s.size(); i++) {
        if (s[i] == 'M') {
            mcnt++;
        } else if (s[i] == 'K') {
            //k를 찾았다면 이전에 있던 m을 모두 처리
            if (mcnt != 0) {
                ans.push_back('1');
                mcnt--;
                while (mcnt>0) {
                    ans.push_back('0');
                    mcnt--;
                }

            }

            /*kcnt++;*/
            ans.push_back('5');
        }


    }

    //아직 적지 않은 M 값이 남아있다면(K값은 반복문에서 모두 처리됨)
    if (mcnt != 0) {
        ans.push_back('1');
        mcnt--;
        while (mcnt>0) {
            ans.push_back('0');
            mcnt--;

        }

    }

    for (int i = 0; i < ans.size(); i++) {
        cout << ans[i];
    }
    cout << '\n';

    return 0;
}

 

 

이 문제는 민겸 수가 주어졌을 때 최댓값과 최솟값을 구하는 방법을 구현하는 문제이다.

 

1. 최댓값

 MMK를 생각해보자

 세 문자를 모두 떼어 생각한다면 115, 합친다면 500이라는 숫자가 나온다.

 즉 MMM..MK로 지정되는 문자들은 모두 묶어서 5를 가장 높은 자릿수에 올려놓아야 한다.

 

 그러고도 처리할 수 없는 나머지 M이 남는다면 이들은 모두 1로 처리한다.

 MMM의 경우 111>100인 느낌이다.

 

2. 최솟값

 역시 MMK를 생각해보자

 최댓값을 구했을 때와는 반대로 K와 M을 따로 떼어 생각해야 5가 가장 낮은 자릿수로 쫒겨나게 된다.

 여기도 나머지 M이 있다면 0을 최대한 많이 만들도록 모두 묶어서 처리한다.

  MMM의 경우 111<100의 느낌이다.

 

 

'Coding Test' 카테고리의 다른 글

백준 15486 퇴사 2  (2) 2024.03.20
백준 2448 별 찍기 (11)  (0) 2024.03.19
백준 16953 A → B  (2) 2024.03.17
백준 19637 IF문 좀 대신 써줘  (2) 2024.03.16
백준 17352 여러분의 다리가 되어 드리겠습니다!  (1) 2024.03.15