본문 바로가기

백준/실버

[백준 21314번] 민겸 수 (C++)

문제링크 : https://www.acmicpc.net/problem/21314

 

21314번: 민겸 수

민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다.

www.acmicpc.net

 

#include <bits/stdc++.h> 
using namespace std;
#define fastio ios_base::sync_with_stdio(0); cin.tie(0);

string s;
string s_min = "";
string s_max = "";
int cnt = 0;

int main()
{

	fastio;
	cin >> s;
	for (int i = 0; i < s.length(); i++)
	{
		if (s[i] == 'M')
		{
			cnt++;
			if (cnt == 1)      //M으로 시작할 때 (ex : MKM)
			{
				s_min += '1';
			}
			else               //바로 앞에도 M이 있을 때 (ex : MM)
			{
				s_min += '0';
			}
		}
		else
		{
			if (cnt > 0)
			{
				s_max += '5';  //K로 시작하고 곱할 때
				for (int j = 0; j < cnt; j++)  //M의 갯수만큼 0추가
				{
					s_max += '0';
				}
				s_min += '5';  
			}
			else  //K 단독인 경우
			{
				s_max += '5';
				s_min += '5';
			}
			cnt = 0;
		}
	}
	if (cnt > 0)  //M으로 끝날 때
	{
		for (int j = 0; j < cnt; j++)
		{
			s_max += '1';
		}
	}

	cout << s_max << "\n" << s_min;
	return 0;
}

처음에 곱해주는 부분을 int형으로 처리했다가 왜 틀리는지 한참 고민했다.

작은 값에서만 테스트했기에 몰랐는데. 범위가 워낙 크기에 발생한 문제였다.

문자열은 가능한 문자열에서만 계산하는 것이 좋다는 것을 다시 체감했다.