CodingTest/Content

백준 21314번 민겸 수 풀이 및 정답(python)

코딩스케치 2025. 3. 30. 14:45


[백준 21314번 민겸 수] 문제 설명 및 풀이

정해진 규칙대로 최댓값과 최솟값을 구해줘야합니다.

 

저의 경우 조금 더 계산하기 편한 최솟값부터 구했습니다.

 

최솟값을 구해보자

1. M과 K가 만났을 경우

=> M과 K를 각각 분리해줍니다. 합치면서 계산하면 큰 숫자가 됩니다.

앞에 M이 몇개든 결합하지 않고 K는 무조건 5로 출력합니다.

2. M끼리는 결합해주자

=> MM을 따로따로 11로 계산할수도 있지만 결합해주면 10으로 오히려 작은 숫자가 되기 때문에 결합해줍니다.

 

최댓값을 구해보자

1. M과 K를 결합해줍니다.

=> M과 K가 만나면 큰 숫자가 됩니다. MK = 50, MMK = 500등등. m의 개수를 파악해두고 K가 나온다면 결합해주는것이 좋습니다.

2. K가 안나오면?

=> K를 만나지 못한 m들은 각각 따로 출력해주는것이 큰 숫자입니다.

=> KMM -> 510, 511 모두 가능한데 K를 만나지 못한 M들을 결합해주면 오히려 작아지기 떄문에 K를 만나지 못한 M들은 따로따로 출력해줍니다.


[백준 21314번 민겸 수]  정답 예시 코드

import sys
input = sys.stdin.readline

given = input().strip()

# 필요한 변수 초기화
min_value = ''
max_value = ''
m_count = 0

for g in given:
    if g == 'M': # M이 나오면 카운트 누적
        m_count += 1
        
    # M을 못만난 K의 경우 어떻게해도 5이기 때문에 바로 출력
    else:
        if m_count == 0: 
            min_value += '5'
            max_value += '5'
            
        # M을 만난 K의 경우 각각 결합할지 결합 안할지 정해줌
        else:
            min_value += str(10 ** (m_count - 1)) + '5'
            max_value += str((10 ** (m_count - 1)) * 50)
            m_count = 0

# K를 못만나고 M만 있는 것들 꼭 처리해주기
if m_count != 0:
    min_value += str(10 ** (m_count - 1))
    max_value += '1' * m_count

print(max_value)
print(min_value)