Part4.1_자료구조(스택,큐,해쉬,힙)_가장 큰 수

Eugenius1st·2022년 1월 15일
0

Python_algorithm

목록 보기
17/83

가장 큰 수

내가 생각한 코드

더럽다.. 해결이 안된다.. 처음 두가지는 알겠고, 그 이후의 수를 넣는 법을 모루겠당?

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)
profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글