더럽다.. 해결이 안된다.. 처음 두가지는 알겠고, 그 이후의 수를 넣는 법을 모루겠당?
m 번 반복한 수를 찾아냈고, 이후에 리스트 합치기만 하면 될 것 같은데 아마 그건... 좀....
LIFO Last In First Out 이라는 의미이다.
리스트를 이용해서 차례차례 들어간 것을 append 해서 넣고 pop해서 넣는 것 자체가 스택이 된다.
9 9 7 7 2 5 2 6 4 2 경우에
string 화 하여 list 화 하면
최초의 숫자 9는 스택에 들어간다.
9
다음 9는 자기보다 크면 크면 넣고 작으면 뺀다
9 9
다음 7은 자기보다 크면 크면 넣고 작으면 뺀다
9 9 7
다음 7은 자기보다 크면 넣고 작으면 뺀다
9 9 7 7
다음 2은 자기보다 크면 빼고 넣는다
9 9 7 7 (2는 지운다.)
다음 5은 자기보다 크면 빼고 넣는다
9 9 7 7 (5는 지운다.)
...
9 9 7 7 6 4 1
이 되었을 때 총 지울 개수 5 중에 3만 지웠다면 나머지 2는 그냥 빼준다
9 9 7 7 6
#1. Alt+W+N 입력하고 Alt+W+V :
import sys
#from collections import deque # deque import
sys.stdin = open("input.txt", "rt")
num, m = map(int,input().split())
num = list(map(int,str(num))) #원소를 string처리 후 리스트로 만들어준다. 그럼 하나하나 접근을 하고 int화 시켜서 리스트화 시킨다
stack = []
for x in num:
while stack and m>0 and stack[-1]<x:# stack이 비어있지 않을 때, 스택의 맨 뒷 자리가 x보다(현재 나보다) 작으면 끄집어낸다.
stack.pop()
m-=1
stack.append(x)
#다 지우지 못한 경우
if m !=0:
stack = stack[:-m] #맨 뒤를 잘라준다.
#for문 돌면서 찍어도 되지만,
res=''.join(map(str,stack))
#조인 활용해서 string을 join시켜 str을 변환시켜서 res가 str화 되어 붙여주기가 되어 나온다.
print(res)