자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[자료구조 활용 ][스택, 큐, 해쉬, 힙] - 가장 큰 수(스택)

얄루몬 2022. 7. 15. 16:39

문제

  • 주어진 숫자를 자릿수들 중 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문을 통해 모두 제거하지 못한 숫자가 있다면 그 수만큼 슬라이싱 기능을 사용해서 제거해준다.