-
[백준] 21314번: 민겸 수(Python)Algorithm PS👩🏻💻/백준 2023. 5. 14. 14:29
문제 링크
https://www.acmicpc.net/problem/21314
21314번: 민겸 수
민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다.
www.acmicpc.net
풀이
풀이 설명
- 우선 문장에 K 포함 유무에 따라 나뉜다.
- K가 없는 경우 -> M만 있다는 뜻.
- result를 바로 구할 수 있다. ex. MMM인 경우 max: 111, min: 100
- K가 있는 경우, K를 기준으로 나뉘기 수가 결정되므로 K의 위치를 담은 리스트(k_pos)를 전달해준다.
- def find_max(k_pos) # max 값을 찾는다.
- k를 포함하여 꼴로 정리한다.
- 문장의 끝이 k가 아니라면, m으로 끝난다는 뜻이므로 마지막 k의 뒤엔 남은 m의 갯수만큼 1로 대체한다.
- def find_min(k_pos) # min 값을 찾는다.
- k를 포함하지 않고 연속된 m은 의 형태로 만들어준다.
- max와 마찬가지로 문장의 마지막이 k가 아닌 경우, 남은 m의 길이만큼 꼴로 처리해준다.
- def find_max(k_pos) # max 값을 찾는다.
코드
from copy import deepcopy minkyum = input() max_result = '' min_result = '' def find_min(k_pos): result = '' temp = deepcopy(minkyum) pre = -1 for k in k_pos: # 완료된 인덱스 -> k까지 n = k - pre - 1 if n > 0: result += str(10 ** (n-1)) pre = k result += '5' # if mmkmmm ->mmm 을 출력 if pre != len(temp) - 1: cnt = len(temp[pre + 1:]) - 1 result += str(10 ** cnt) return result def find_max(k_pos): result = '' temp = deepcopy(minkyum) pre = -1 for k in k_pos: # 완료된 인덱스 -> k까지 n = k - pre result += str(5 * (10 ** (n - 1))) pre = k # if mmkmmm ->mmm 을 출력 if pre != len(temp)-1: cnt = len(temp[pre+1:]) result += '1' * cnt return result # k를 기준으로 나눠서 작성하지만, m만 있는 숫자인 경우 if 'K' not in minkyum: n = len(minkyum) max_result = '1' * n min_result = str(10 ** (n-1)) else:# k가 포함된 경우 k_pos = [] for i, v in enumerate(minkyum): if v == 'K': k_pos.append(i) max_result = find_max(k_pos) min_result = find_min(k_pos) print(max_result) print(min_result)
'Algorithm PS👩🏻💻 > 백준' 카테고리의 다른 글
[백준] 2141번: 우체국(Python) (0) 2023.05.22 [백준] 2212번: 센서 (Python) (0) 2023.05.15 [백준] 2615번: 오목 (완전탐색, Python) (0) 2023.05.10 [백준] 2887번: 행성 터널(그래프, Python) (1) 2023.05.10 [백준] 22858번: 원상 복구 (small) (Python) (0) 2023.05.07 - 우선 문장에 K 포함 유무에 따라 나뉜다.