[백준 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)
'CodingTest > Content' 카테고리의 다른 글
백준 1541번 잃어버린 괄호 풀이 및 정답(python) (1) | 2025.03.25 |
---|---|
백준 20300번 서강근육맨 풀이 및 정답(python) (0) | 2025.03.24 |
백준 11508번 2+1 세일 풀이 및 정답(python) (0) | 2025.03.24 |
백준 14916번 거스름돈 풀이 및 정답(python) (0) | 2025.03.23 |
백준 2798번 블랙잭 풀이 및 정답(python) (0) | 2025.02.08 |