CS/Data Structure & Algorithm

가장 큰 수 (스택)

Coding Kitsune 2022. 6. 12. 20:48

 

먼저 처음 포인트는 이 숫자들을 리스트에 받아줘야하는데, 띄워쓰기로 구분되어있지 않기 때문에

 

항상 받아왔던 방식인 map(int, input().split()) 방식으로 받을 수가 없다.

 

그래서 str로 받아서 이것들을 list에 넣는뒤, 다시 int형으로 변환시켜준다. 

 

b_num, delete = map(int, input().split())
nums = []
for i in range(len(str(b_num))):
    nums.append(str(b_num)[i])
nums = list(map(int, nums))

 

그 후, 새로운 리스트를 만들어 nums에 있는 수들을 끄집어 내며 하나씩 비교해보고,

 

새로운 리스트에 들어있는 수보다 nums[0]에 들어있는 수가 크다면 이를 빼주고,

 

삭제할 수 있는 개수인 delete 문을 -1 해준다.

 

그 조건에 들어가지 않으면 nums에 들어있는 첫번째 원소를 pop해주고 이를 새 리스트에

 

넣어준다.

 


while len(nums) != 0:
    if len(new_nums) != 0 and new_nums[-1] < nums[0] and delete > 0:
        new_nums.pop()
        delete -= 1
        continue
    new_nums.append(nums.pop(0))
 
 
 
 
 
이를 기존 리스트가 다 pop 될 때 까지 반복해주면 새 리스트에 내림차순으로 정렬되어 있을 것이다.
 
 
그래서 남은 삭제해야하는 숫자인 delete 만큼 뒤에서 끊으면 된다.
 
 
if delete != 0:
    new_nums = new_nums[:-delete]

후에 리스트에 있는 숫자들을 하나로 출력해준다.

 

for num in new_nums:
    print(num, end="")