본문 바로가기
Algorithm

[프로그래머스] 큰 수 만들기

by YGSEO 2021. 3. 4.
728x90

다른 사람의 풀이

def solution(number, k):
    # stack에 입력값을 순서대로 삽입 
    stack = [number[0]]
    for num in number[1:]:
        # 들어오는 값이 stack 값보다 크면, 기존의 값을 제거하고 새로운 값으로 바꿈 
        # 참고 : len(stack) > 0 == stack
        while len(stack) > 0 and stack[-1] < num and k > 0:
            # 값을 한개 빼서 k는 1이 제거 
            k -= 1
            # 내부의 값을 제거 
            stack.pop()
        # 새로운 값을 삽입 
        stack.append(num)
    # 만일 충분히 제거하지 못했으면 남은 부분은 단순하게 삭제
    # 이렇게 해도 되는 이유는 이미 큰 수부터 앞에서 채워넣었기 때문 
    if k != 0:
        stack = stack[:-k]
    return ''.join(stack)

 

Stack을 이용

 

while문의 역할이 중요하다

stack 조건을 stack[-1] < num으로 주면서

num이 기존 값보다 크다면 stack pop을해서 제거한 후 while문을 나온다음 stack의 새로운 값으로 append된다.

num이 기존 값보다 작다면(즉, 기존 값이 더 크기 때문에 pop하지 않고 append를 한다.) append를 해서 new idx element가 된다. (순회하면서 현재 idx의 num이 가장 크다고 판단되기 때문에)

여기서 혼동이 있을 수 있지만, 문제 조건에서 순서가 중요하기 때문에 헷갈리지 말아야 한다.

 

for 문이 정상적으로 완료된 후에도 k가 0보다 커서, 즉, stack의 k번째 까지의 element가 계속 큰수부터 차례로 채워졌기  때문에 ( stack[-1] > num ) 뒤의 k자리수 까지 slicing으로 제거해줘야 한다.

 

 

 

train-validation-test.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-level-2-%ED%81%B0-%EC%88%98-%EB%A7%8C%EB%93%A4%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

[ 프로그래머스 ] level 2 큰 수 만들기 - 파이썬

프로그래머스 level 2 탐욕법(Greedy) 문제를 설명한다. 코딩테스트 연습은 매번 python3를 기준으로 작성한다. [ 문제 설명 ] 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하

train-validation-test.tistory.com

 

728x90

'Algorithm' 카테고리의 다른 글

[Python] Heap  (0) 2021.03.10
[프로그래머스] 조이스틱  (0) 2021.03.05
[프로그래머스] 삼각 달팽이  (0) 2021.03.04
[프로그래머스] 문자열 압축 파이썬  (1) 2021.03.03
[프로그래머스] 주식가격 파이썬  (0) 2021.03.03

댓글