Algorithm/백준

[백준/Python] 민겸 수

poppy 2021. 12. 13. 11:44
반응형

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

 

21314번: 민겸 수

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

www.acmicpc.net

MK일 경우 최소값은 15, 최대값은 50이 된다.

MMK일 경우 최소값은 105, 최대값은 500이 된다.

MKMM일 경우 최소값은 1510, 최대값은 5011이 된다.

이제 규칙을 알 수 있다.

 

최소값의 규칙 = K로 끝날 때마다 10 ** (K가 나오기 전 M의 개수) + 5 를 추가한다. M으로 끝날 때 10 ** (M의 개수 - 1) 를 추가한다.

최대값의 규칙 = K로 끝날 때마다 5 * (10 ** (K가 나오기 전 M의 개수)) 를 추가한다. M으로 끝날 때 M의 개수만큼 1을 추가한다.

num = input()
min, max = '', ''
m = 0 # K가 나오기 전 M의 개수

for n in num:
    if n == 'M': # M일 경우 개수 증가
        m += 1
    else: # K일 경우 m의 값에 따른 최소, 최대를 구한다
        if m > 0:
            min += str(10 ** m + 5)
            max += str(5 * (10 ** m))
        else:
            min += '5'
            max += '5'
        m = 0

# 마지막이 M으로 끝났을 경우 처리
if m > 0:
    min += str(10 ** (m-1))
    max += '1' * m

print(max)
print(min)

1. 민겸 수를 입력받고 필요한 변수를 생성한다.

2. 수를 탐색하면서 경우에 따른 처리를 해준다.

    2-1. M일 경우 m += 1 하여 개수를 증가시킨다.

    2-2. K일 경우 m > 0 라면 규칙에 따라 최소, 최대를 구하고 m = 0 라면 5를 추가한다. 그리고 m을 초기화한다.

3. 마지막이 M으로 끝났을 경우 위의 반복문에서 처리가 안됐으므로 처리를 해줘야 한다. 규칙에 따라 최소, 최대를 구해 추가한다.

4. 결과를 출력한다.

반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준/Python] 이분 그래프  (0) 2021.12.26
[백준/Python] 감시  (0) 2021.12.20
[백준/Python] 크게 만들기  (0) 2021.12.06
[백준/Python] 병든 나이트  (0) 2021.12.02
[백준/Python] 공유기 설치  (0) 2021.11.29