++/자료구조&알고리즘

[Leetcode] 232. Implement Queue using Stacks

writtenbyrla 2024. 1. 4. 16:30

✅ 문제 - 스택를 이용한  큐 구현

 

 


 

 

✅ 풀이

 

💡 문제 이해하기
이 문제는 스택을 이용해서 큐를 구현해야 한다.
 FIFO(First In First Out) 방식으로 먼저 삽입된 요소가 먼저 제거되며 쉽게 말해 선입선출의 개념이다.
요소를 가로로 놓고 봤을 때 삽입은 오른쪽으로, 제거는 왼쪽에서부터 된다.
스택은 LIFO(Last In First Out) 방식으로 삽입되는 방향은 큐와 같지만, pop연산에 있어서 방향이 반대다.

MyQueue 클래스의 구현 내용 정의한 것을 보면 알고 있는 스택이 연산하는 방식과 조금 다르다.
1. push: 큐의 가장 끝에 요소 x를 삽입해야 한다.
2. pop, peek: 가장 첫 번째 자리 요소를 제거하거나 조회해야 한다.
   → 스택 방식으로 큐를 구현하여야 하기 때문에 처음 삽입된 요소를 가장 뒤로 보내서 제거해야 한다.
   → 제거할때마다 뒤로 보내기 번거로우므로 요소들을 뒤집어놓고 끝에 있는 요소부터 제거할 수 있도록 한다.

 

 


 

✅ 전체 코드

class MyQueue:  
    def __init__(self):
        self.input = [] #입력용 배열
        self.output = [] #출력용 배열

    # 큐의 마지막에 x 삽입    
    def push(self, x: int) -> None:
        self.input.append(x)

    # 큐의 처음에 있는 요소 삭제
    def pop(self) -> int:
        self.peek() #뒤집은 요소
        return self.output.pop() #스택은 오른쪽에서부터 제거
        
    # 큐의 처음에 있는 요소 조회
    def peek(self) -> int:
        if not self.output: #출력용 배열이 없을 때 입력용 배열을 뒤집어주는 작업
            while self.input: #input 리스트에 남는게 없을 때 까지
                self.output.append(self.input.pop())
        return self.output[-1] #-1은 가장 끝에 있는 요소   
            
        
    # 큐가 비었는지 확인
    def empty(self) -> bool:
        return (len(self.input)==0) and (len(self.output)==0)

 

 

'++ > 자료구조&알고리즘' 카테고리의 다른 글

[Leetcode] 739. Daily Temperatures  (1) 2024.01.04
[baekjoon] 1966. 프린터 큐  (0) 2024.01.04
[Leetcode] 225. Implement Stack using Queues  (0) 2024.01.04
[baekjoon] 9012. 괄호  (3) 2024.01.04
[Leetcode] 20. Valid Parentheses  (0) 2024.01.04