[문제]
선생님은 현수에게 숫자 하나를 주고, 해당 숫자의 자릿수들 중 m개의 숫자를 제거하여 가장 큰 수를 만들라고 했습니다.
여러분이 현수를 도와주세요.(단 숫자의 순서는 유지해야 합니다)
만약 5276823 이 주어지고 3개의 자릿수를 제거한다면 7823이 가장 큰 숫자가 됩니다.
▣ 입력설명
첫째 줄에 숫자(길이는 1000을 넘지 않습니다)와 제가해야할 자릿수의 개수가 주어집니다.
▣ 출력설명
가장 큰 수를 출력합니다.
▣ 입력예제 1
5276823 3
▣ 출력예제 1
7823
▣ 입력예제 2
9977252641 5
▣ 출력예제 2
99776
[풀이]
num, m = map(int, input().split())
stack = []
num = list(map(int, str(num))) # list , string 화 시킴
for x in num:
# 비어 있거나, m개 모두 제거 했거나, 마지막 수가 x 보다 작을 때
# 값을 꺼냄
while stack and m>0 and stack[-1] < x:
stack.pop()
m -= 1
stack.append(x)
# m개를 다 지우지 못했을 경우
if m != 0:
stack = stack[:-m]
res = ''.join(map(str, stack))
print(res)
[내용]
** 스택을 이용해야 한다는것은 알고 있었지만, 이후 알고리즘 구현을 생각하지 못했다.
- 알고리즘: 이전 값이 지금 값보다 작으면 이전 값 제거 후 지금 값 넣어주기.
'Coding Test > Python' 카테고리의 다른 글
| [python] 부분집합 구하기(DFS) (0) | 2023.03.19 |
|---|---|
| [python] 재귀함수를 이용한 이진수 출력 (0) | 2023.03.15 |
| [Python] 마구간 정하기(결정알고리즘) (0) | 2023.02.17 |
| [Python] 뮤직비디오(결정알고리즘) (0) | 2023.02.16 |
| [python] 랜선자르기(결정알고리즘) (0) | 2023.02.13 |