728x90
https://www.acmicpc.net/problem/21314
헷갈리는 문제였는데,,, 4번은 틀렸다ㅋㅋ...
최댓값과 최솟값을 따로 구해주었는데,
최댓값은 뒤에 K가 붙으면 *5가 되는데(뒤에 K는 1개만 붙을 수 있음)
M의 개수를 구하고 다음 원소가 K라면 5가 붙고 M의 개수만큼 뒤에 0을 붙인다.
현재 원소가 K라면 5만 붙인다. (모두 M이라면 1로만 구성된다)
최솟값은 K를 하나로 자르고, M은 최대한 길게 자른다(K 없이)
M의 개수를 구하고 M-1개만큼 0을 붙인다. (11보다 10이 더 작으므로)
현재 원소가 K라면 5를 붙인다.
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
string s, maxv = "", minv = "";
cin >> s;
//max value
for(int i=0; i<s.size(); i++){
if(s[i] == 'M'){ //M의 경우
//연속 M 개수 카운팅
int end = i;
while(end < s.size()){
if(s[end] == 'M') end++;
else break;
}
//10진수로 변환
if(end == s.size()){ //모두 M인 경우
for(int j=0; j<end-i; j++){
maxv += "1";
}
}else{ //다음 원소가 K인 경우
maxv += "5";
for(int j=0; j<end-i; j++){ //M의 개수만큼 0붙음
maxv += "0";
}
}
i = end;
}else{ //K의 경우
maxv += "5";
}
}
//min value - k를 하나로 자르기, M은 최대한 길게(K없이)
for(int i=0; i<s.size(); i++){
if(s[i] == 'M'){
int end = i;
while(end < s.size()){
if(s[end] == 'M') end++;
else break;
}
//10진수로 변환
minv += '1';
end--;
for(int j=0; j<end-i; j++){ //M-1개만큼 0 붙이기
minv += '0';
}
i = end;
}else{
minv += '5';
}
}
cout << maxv << '\n' << minv << '\n';
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 2422번: 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2022.07.14 |
---|---|
[백준/c++] 19532번: 수학은 비대면강의입니다 (0) | 2022.07.13 |
[백준/c++] 20365번: 블로그2 (0) | 2022.07.13 |
[백준/c++] 1541번: 잃어버린 괄호 (0) | 2022.07.13 |
[백준/c++] 1931번: 회의실 배정 (0) | 2022.07.12 |