선생님은 현수에게 숫자 하나를 주고, 해당 숫자의 자릿수들 중 m개의 숫자를 제거하
여 가장 큰 수를 만들라고 했습니다. 여러분이 현수를 도와주세요.(단 숫자의 순서는
유지해야 합니다)
만약 5276823 이 주어지고 3개의 자릿수를 제거한다면
7823이 가장 큰 숫자가 됩니다.
▣ 입력설명
첫째 줄에 숫자(길이는 1000을 넘지 않습니다)와 제거해야할 자릿수의 개수가 주어집니다.
▣ 출력설명
가장 큰 수를 출력합니다.
▣ 입력예제 1
5276823 3
▣ 출력예제 1
7823
▣ 입력예제 2
9977252641 5
▣ 출력예제 2
99776
스택 첫시간이라서 강의를 들어서 우선 접근법을 배운다
num, m=(map(int,input().split()))
num=list(map(int, str(num)))
#n자리의 숫자였던 것을 string처리해주면 하나하나를
#잘라서 볼 수 있다. 꼭 str(num) 처리 해줘야 한다
#print(a) 하면 [5, 2, 7, 8, 6, 2, 3] 이렇게 저장이 된다
stack = []
for x in num :
while stack and m>0 and stack[-1] < x :
#나보다 작은놈이라면
#while stack : stack이란 리스트가 비어있으면 거짓이 되는 것
#m이 0이상이어야 지울 게 남아있는거
stack.pop()
m-=1
stack.append(x)
if m != 0 :
stack=stack[:-m] #-m자료 딱 이전까지만 출력하는 것이다, 뒤쪽의 m개 자료 날리기
#for 돌면서 찍어도 되고
res=''.join(map(str, stack)) #스택이 지금 정수화 돼있으니깐 str화 해줘야 한다
print(res)
스택이라는 자료구조가 있다 (나중에 큐, 힙이란 것도 배울 예정)
스택은 last in, first out이라는 구조이다
스택은 운동장의 구덩이에 축구공이 빠지면 가장 나중에 빠진 축구공이 젤 먼저 빠지게 되는 구조와 같은 것
파이썬은 리스트를 활용해서 스택을 구현하는 것이 가능하다
없애버리는 것 pop()으로 구현
num은 5278623 인데 num=list(map(int, str(num)))
로 처리해주면 (n자리의 숫자였던 것을 string처리해주면) 하나하나씩 잘려서 볼 수 있다. 꼭 str(num) 처리 해줘야 한다,
print(a) 하면 [5, 2, 7, 8, 6, 2, 3] 이렇게 나온다
내림차순으로 정렬되기 때문에 맨 뒤에를 제거하면 된다
s=[1,2,3,4,5] 일 때 s[:-2] 라고 하면 s[1, 2, 3]출력된다
파이썬으로 스택을 구현하는 방법
: 스택(Stack), 추출되는 데이터 : 가장 나중에 삽입된 데이터
- 스택 지원하는 오퍼레이션 : pop & append
- 스택 자료구조 초기화 할 때 빈 리스트 만들어주기