문제
- 주어진 숫자를 자릿수들 중 m개의 숫자를 제거하여 가장 큰 수를 만들어라
- 이때 주어진 숫자들의 순서는 유지해야 한다,.
문제 풀이
n,m = map(int,input().split())
num = list(map(int,str(n)))
stack = []
for x in num:
while stack and m > 0 and stack[-1] < x:
stack.pop()
m -= 1
stack.append(x)
if m != 0:
stack = stack[:-m]
for i in stack:
print(i, end="")
- while문을 통해서 현재 리스트의 숫자보다 더 작은 숫자가 stack에 있다면 하나씩 제거해주는 작업이다.
- while stack = 스택이 비어있지 않고
- m > 0 제거해야 하는 숫자를 다 제거하지 않은 상태이고
- stack[-1] < x 현재 숫자보다 스택에 있는 숫자가 더 작다면 빼준다.
- while문을 통해 모두 제거하지 못한 숫자가 있다면 그 수만큼 슬라이싱 기능을 사용해서 제거해준다.
'자료구조와 알고리즘 > 개인적인 코딩테스트 관련 풀이' 카테고리의 다른 글
[자료구조 활용][스택, 큐, 해쉬, 힙] - 후위 연산(스택) (0) | 2022.07.17 |
---|---|
[자료구조 활용][스택, 큐, 해쉬, 힙] - 후위 표기식 만들기(스택) (0) | 2022.07.17 |
[이분탐색(결정알고리즘)][그리디 알고리즘] - 침몰하는 타이타닉(그리디 알고리즘) (0) | 2022.07.12 |
[이분탐색(결정알고리즘)][그리디 알고리즘] - 창고 정리(그리디 알고리즘) (0) | 2022.07.12 |
[이분탐색(결정알고리즘)][그리디 알고리즘] - 씨름 선수(그리디 알고리즘) (0) | 2022.07.11 |