Post

큰 수 만들기 lv2

🌈문제 링크

Desktop View

Desktop View

입출력 예를 보니 number에서 숫자를 k번 만큼 차감하여 제일 큰 수로 반환하네, 물론 자리 배치는 고정

1
2
3
4
5
6
7
8
9
10
11
def solution(number, k):
    storage = [] # Stack
    
    for num in number:
        while k > 0 and storage and storage[-1] < num:
            storage.pop()
            k -= 1
        storage.append(num)
        
    return ''.join(storage[:len(storage) - k])
						# 괄호 안에 든 것을 문자열로 결합

헷갈리지 말자!!

1
2
3
len(storage) == 6

:len(storage) == [1, 2, 3, 4, 5, 6]

Desktop View

Desktop View

Desktop View

def solution(number, k):
storage = []

solution 함수 내에 스택으로 사용할 빈 리스트 초기화

1
2
`for num in number:`
    `while k > 0 and storage and storage[-1] < num:`
  • num이 주어진 number 안에서 순회한다, 이 3가지 조건이 맞을 동안만

k>0
–> 아직 제거할 횟수(k)가 남았는지 확인

and storage
–> 그리고 storage라는 스택이 비어 있지 않고

and storage[-1] < num
–> 현재 순회중인 num이 스택의 마지막 숫자보다 클 때

1
2
3
        `storage.pop()
        k -= 1
    storage.append(num)`
  • 위의 while의 3가지 조건에 동시에 부합한다면 storage라는 스택의 마지막 숫자 제거
  • 그리고 제거할 횟수(k)를 1개 차감하고 그 숫자를 스택에 추가한다.

return ''.join(list[:len(list) - k])

1
2
3
4
5
6
7
2개로 나누어보자
--->     list[:len(list) - k]

- 리스트 길이의 처음부터 계산해 k를 뺀것
‘’.join(?)

- 선택된 리스트 요소들을 문자열로 결합

다른 코드

1
2
3
4
5
6
7
8
9
10
11
def solution(number, k):
    stack = []
    for n in number:
        while len(stack)>0 and k>0 and stack[-1]<n:
            stack.pop()
            k -= 1
        stack.append(n)
    if k:
        return number[:-k]    # ex) number[:-4]  뒤에서 4개까지 빼고 숫자 싹다 갖고 오기
    else:
        return "".join(stack)

또 다른 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(number, k):
    storage = []  
    for i, num in enumerate(number):

        while storage and storage[-1] < num and k > 0:
            storage.pop()  
            k -= 1
            
        if k == 0:
            storage += list(number[i:])
            break
            
        storage.append(num)
    storage = storage[:-k] if k > 0 else storage

    return ''.join(storage)
  • storage = storage[:-k] if k > 0 else storage

    k가 참이면 storage 스택의 마지막에서 k번까지 제외하고 가져오고

    그 외는 스택을 그대로 유지한다.




참고

https://velog.io/@soo5717/프로그래머스-큰-수-만들기-파이썬

https://scarletbreeze.github.io/articles/2019-07/pythonKit문제풀이(4)탐욕법큰수

This post is licensed under CC BY 4.0 by the author.
3D GIF