본문 바로가기

Algorithms and Languages/파이썬 알고리즘 문제풀이

[Python/DailyAlgo] 81. 스택, 82. 큐, 83. 덱

문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.

문제 유형 보기

더보기
스택, 덱

https://dailyalgo.kr/ko/problems/81

https://dailyalgo.kr/ko/problems/82

https://dailyalgo.kr/ko/problems/83

 

간단한 문제들. 모아서 짤막하게 정리했다.


81. 스택

# 강사님 풀이
def solution(queries):

    stack = []
    answer = []

    for query in queries:

        # 'pop'일 경우를 먼저 걸러내는 게 좋다
        if query == 'pop': # 'pop'일 경우
            # empty stack 조건

            # 아래처럼 하는 게 더 파이써닉하다!!
            # 컨테이너는 False와 True로 평가되기 때문.
            # []는 False로 평가됨.

            if stack: # 스택이 비어있지 않으면
                answer.append(stack.pop())
            else: # 스택이 비어있으면
                answer.append(0)
            
            continue

        # 이거 if-else로 해도 되지만, indent 줄이기 위해 위처럼 continue 
        # 로 분기해주는 게 더 보기 좋음.

        # 'push'일 경우
        operation, num = query.split()
        stack.append(int(num))
        
    return answer

82. 큐

def solution(queries):
    answer = []
    queue = []

    # 큐가 비어있으면, pop 시 0을 answer에 추가하면 됨.

    for query in queries:
        # 'pop'인 경우
        if query == 'pop':
            if queue: # queue가 비어있지 않으면
                answer.append(queue.pop(0))
                # 이게 answer.append(queue.pop())면 stack으로 작동함.
            else: # queue가 비어있으면
                answer.append(0)

            continue

        # 이제, 'push'인 경우
        operation, number = query.split()
        queue.append(int(number))



    return answer

# 입력 : 쿼리 문자열을 요소로 가지는 리스트
# 출력 : 쿼리 결과(pop 결과)를 요소로 가지는 리스트

83. 덱

from collections import deque
def solution(queries):

    queue = deque()
    answer = []

    for query in queries:
        if query == 'removeFirst':
            if queue: # 큐가 비어있지 않으면
                answer.append(queue.popleft())
            else: # 큐가 비어있으면
                answer.append(0)
            continue
        if query == 'removeLast':
            if queue: 
                answer.append(queue.pop())
            else:
                answer.append(0)
            continue
        
        operation, number = query.split()
        number = int(number)

        if operation == 'addFirst':
            queue.appendleft(number)
            
        else: 
            queue.append(number)

    
    return answer

# 입력 : 수행할 쿼리들이 담긴 문자열 리스트
# 출력 : 쿼리 수행 결과 덱을 의미하는 정수 리스트