Code Art 2024. 4. 3. 18:36

후입선출 구조 (Last In First Out) - 나중에 들어간게 먼저 나가는 구조

 

# 스택을 만드는 방법
stack = [] 파이썬에서는 리스트가 동적 배열로 구성되어있어서 스택의 기능을 모두 지원한다.

# 기본 메소드
stack.append(x) : x를 넣기
stack.pop(x) : x를 뺴기

# 스택을 활용한 Greedy 1.https://school.programmers.co.kr/learn/courses/30/lessons/42883
def solution(number, k):
    stack = []  # 결과를 저장할 스택
    for num in number:
        print("현재 숫자:", num)
        print("이전 스택 상태:", stack)
        # 스택이 비어있지 않고, k가 0보다 크며, 스택의 마지막 원소가 현재 숫자보다 작은 경우
        while stack and k > 0 and stack[-1] < num:
            print("스택의 마지막 원소가 현재 숫자보다 작으므로 제거:", stack[-1])
            stack.pop()  # 스택의 마지막 원소를 제거
            k -= 1  # 제거할 숫자 개수 감소
            print("남은 제거 가능 횟수:", k)
            print("스택 상태:", stack)
        stack.append(num)  # 현재 숫자를 스택에 추가
        print("스택에 현재 숫자 추가:", num)
        print("스택 상태:", stack)

    # 만약 k개의 숫자를 모두 제거하지 못했다면, 마지막 k개의 숫자를 제거
    stack = stack[:-k] if k > 0 else stack
    print("최종 결과:", stack)

    return ''.join(stack)