🎈 가장 큰 수
선생님은 현수에게 숫자 하나를 주고, 해당 숫자의 자릿수들 중 m개의 숫자를 제거하
여 가장 큰 수를 만들라고 했습니다. 여러분이 현수를 도와주세요.(단 숫자의 순서는
유지해야 합니다)
만약 5276823 이 주어지고 3개의 자릿수를 제거한다면 7823이 가장 큰 숫자가 됩니다.
▣ 입력설명
첫째 줄에 숫자(길이는 1000을 넘지 않습니다)와 제가해야할 자릿수의 개수가 주어집니다.
▣ 출력설명
가장 큰 수를 출력합니다.
▣ 입력예제 1
5276823 3
▣ 출력예제 1
7823
▣ 입력예제 2
9977252641 5
▣ 출력예제 2
99776
import sys
sys.stdin = open("input.text", "rt")
input = sys.stdin.readline
num, N = map(int, input().split())
num = list(map(int, str(num))) #스트링으로 바꾼 후에 다시 int로 맵핑 해주고 그걸 리스트화!
#데이터를 지울 것이기 때문에 인덱스 접근보단...
data = [] #결과값을 저장할 리스트.
for x in num: #본인 앞에 있는 수보다 본인이 크면 그것들 지워야지
while data and N > 0 and data[-1] < x:
data.pop()
N -= 1
data.append(x)
if N > 0:
data = data[:-N]
for x in data:
print(x, end = "")
else:
for x in data:
print(x, end = "")
🎃 코멘트
각각의 자리의 숫자가 어떤 의미가 있는지 파악했어야 했다. 제거한 숫자가 가장 큰 숫자가 되려면.. 각각의 자리의 숫자들은 내 앞의 자리의 숫자들보다는 작으면 안된다는 생각 있어야 한다.
예를들어, 5276 이라면 반복문을 돌면서 2를 만났을 때 2 앞에는 5. 즉 자기보다 작은 숫자는 없으니 넘어가. 7을 만났을 때는 자기 앞에 5, 2 둘 다 작으므로 이 숫자들을 지워줘야겠지. 이런 식으로 숫자들을 지워서 가장 큰 숫자를 만들 때 각 자리의 숫자는 어떤 의미인지 생각했어야 했다. (숫자의 순서는 유지해야 된다는 조건)
결과를 따로 data 리스트에 저장하려는 시도.
앞에 것을 지우고 자기가 앞으로 가고. 이런 것을 쉽게 구현하게 해주는 자료구조가 바로 스택이다.
따로 join 기능 알아보자.