문제링크 : https://www.acmicpc.net/problem/21314
#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형으로 처리했다가 왜 틀리는지 한참 고민했다.
작은 값에서만 테스트했기에 몰랐는데. 범위가 워낙 크기에 발생한 문제였다.
문자열은 가능한 문자열에서만 계산하는 것이 좋다는 것을 다시 체감했다.
'백준 > 실버' 카테고리의 다른 글
[백준 11332번] 시간초과 (C++) (0) | 2023.02.14 |
---|---|
[백준 16401번] 과자 나눠주기 (C++) (0) | 2023.02.13 |
[백준 17204번] 죽음의 게임 (C++) (0) | 2023.02.11 |
[백준 14465번] 소가 길을 건너간 이유 5 (C++) (0) | 2023.02.10 |
[백준 9417번] 최대 GCD (C++) (0) | 2023.02.09 |