문제
코드
My answer
import sys
input=sys.stdin.readline
a=input()[:-1]
temp=[]
max_n=''
min_n=a.split('K')
for i in range(len(a)):
if(a[i]=='M'):temp.append(a[i])
else:
if(temp==[]):max_n+='5'
else:
max_n=max_n+'5'+('0'*(len(temp)))
temp=[]
if(temp!=[]):max_n=max_n+('1'*len(temp))
for i in range(len(min_n)):
if(min_n[i]!=''):
min_n[i]='1'+('0'*(len(min_n[i])-1))
min_n='5'.join(min_n)
print(max_n)
print(min_n)
Another answer
data = input()
max = "" #최댓값 결과
min = "" #최솟값 결과
m = 0
for i in range(len(data)):
if data[i] == 'M':
m += 1 #M이 나온다면 m을 증가
elif data[i] == 'K':
if m: #M후에 K가 연속해서 나온 경우라면
min += str(10**m + 5) #최솟값의 경우 5를 더해주고
max += str(5 * (10**m)) #최댓값의 경우 5를 곱해준다
else: #만일 K만 두번이상 연속된 경우
min += "5"
max += "5"
m = 0
if m: #'K'없이 'M'들로 문자열이 끝난 경우
min += str(10 ** (m-1))
while m:
max += "1"
m -= 1
print(max)
print(min)
풀이
우선 문제 이해하는게 좀 헷갈려서 오래 걸렸다. 나는 최대값과 최소값을 나누어서 구하였다.
[최대값]
우선 M=1, MK=50, MMK=500 이런식으로 M과K를 끊어서 MK=50 / M,K=1,5 이므로 MK는 붙어야 더 숫자가 커진다.
따라서 전체 문자열을 훑으면서 M이면 그냥 리스트에 넣고, K를 만나면 리스트 안에있던 5+리스트안에 있던 M의갯수만큼 넣어주면 된다. 즉 MMMK 이면 리스트에 MMM이 들어가있고 K를 만나면 5에다가 0을 3개 붙여서 MMMK=5000이 된다.
이런식으로 넣어주고 잊지말아야할 점은 마지막에 K가 안나와 예를들어 ...MMM이런식으로 끝날 때는 M을 전부 1로 바꿔서 111로 바꾸면 된다. M을 전부 붙여서 MMM을 하나로보면 100이 되기 떄문에 M,M,M으로 끊어서 111로 만드는게 중요하다. 즉 MKMMM일시에는 MK를 50으로 바꾸고, MMM을 111로 바꿔 50111이 된다.
[최소값]
최소값은 간단했는데 그냥 모든 K는 M과 합쳐지지 않게 그냥 5로 바꾸면 된다. M과K가 합쳐지는순간 숫자가 커지기 때문에 K로 SPLIT하고 M은 최대한 붙여서 전부 숫자로 바꿔주면 된다. M도 끊어주면 1로바뀌기 떄문에, 즉 MKKMMK이면 M=1, KK=55,MM=10,K=5 이런식.
다른 풀이의 경우 한번만 돌려서 푼 경우인데, 이 경우도 참고하면 좋을 것 같다.
다른 풀이 해설
최댓값을 구하기 위해서는 최대한 M과 K로 구성된 숫자를 많이 만들어야 하고
최솟값을 구하기 위해서는 MK가 같이 포함된 숫자를 만들면 안된다.
M과 K로 구성된 숫자는 10을 (M의 개수) 만큼 거듭제곱해주고 5를 곱해준다
ex) MK -> (10^1) * 5 = 50
M과 K가 연속되었는데 둘이 같은 숫자가 아니라면 10을 (M의 개수) 만큼 거듭제곱 해주고 5를 더해준다
ex) M K -> (10^1) + 5 = 15
추가 테스트 케이스
입력 :
KMKMM
정답 :
55011
51510
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #2979 - 트럭 주차 (0) | 2023.09.02 |
---|---|
[Python] 백준 #11501- 주식 (0) | 2023.09.01 |
[Python] 백준 #20365- 블로그 2 (0) | 2023.09.01 |
[Python] 백준 #1541- 잃어버린 괄호 (0) | 2023.09.01 |
[Python] 백준 #19941 - 햄버거 분배 (0) | 2023.08.24 |