상세 컨텐츠

본문 제목

99클럽 코테 스터디 14일차 TIL + 오늘의 학습 키워드 : 큐

본문

728x90
반응형



99클럽 코테 스터디 14일차 TIL + 오늘의 학습 키워드 : 큐

백준 10845번 _ 큐

 

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

  • 만들어야 할 함수들은
    1.정수 X를 큐에 넣는 연산 def push(x)
    2.큐 리스트에 정수 값이 존재하는 조건에서 큐의 가장 앞에 있는 정수를 프린트하고 큐 리스트에서 프린트한 정수를 삭제하는 것과 값이 존재하지 않는 조건에서는 -1를 프린트 하는 def pop() 
     3.큐 리스트의 값의 개수를 파악하는 def size() 
    4. 큐 리스트의 공간의 값 존재 여부를 파악하는 def empty()
    5. 큐의 리스트의 가장 뒤부분의 위치를 찾아서 그 값을 프린트하는 def front()
    6. 큐의 리스트의 가장 첫 위치를 찾아서 그 값을 프린트하는 def back()
    을 만든다.

    이 모든 함수들을 queue 라는 클래스 내에 선언한다 까지가 내가 이해한 부분

import sys
from collections import deque

class Queue:
    def __init__(self):
        self.queue = deque()

    def push(self, x):
        self.queue.append(x)

    def pop(self):
        if self.empty():
            return -1
        return self.queue.popleft()

    def size(self):
        return len(self.queue)

    def empty(self):
        return 1 if len(self.queue) == 0 else 0

    def front(self):
        if self.empty():
            return -1
        return self.queue[0]

    def back(self):
        if self.empty():
            return -1
        return self.queue[-1]

def main():
    input = sys.stdin.read
    data = input().splitlines()
    
    n = int(data[0])  # 첫 번째 줄: 명령의 수
    q = Queue()
    results = []

    for i in range(1, n + 1):
        command = data[i].split()
        if command[0] == "push":
            q.push(int(command[1]))
        elif command[0] == "pop":
            results.append(q.pop())
        elif command[0] == "size":
            results.append(q.size())
        elif command[0] == "empty":
            results.append(q.empty())
        elif command[0] == "front":
            results.append(q.front())
        elif command[0] == "back":
            results.append(q.back())

    # 결과 출력
    sys.stdout.write('\n'.join(map(str, results)) + '\n')

if __name__ == "__main__":
    main()

설명:
1. Queue 클래스: deque를 사용하여 큐를 구현합니다. deque는 양쪽 끝에서 빠른 append와 pop 연산을 지원합니다.
2. 명령 처리: main 함수에서 입력을 읽고 각 명령을 처리합니다. 명령에 따라 큐의 메서드를 호출하고 결과를 리스트에 저장합니다.
3.결과 출력: 모든 결과를 한 번에 출력하여 성능을 최적화합니다.


 



1. Queue 클래스
Queue 클래스는 큐의 기본 동작을 구현합니다. 이 클래스는 다음과 같은 메서드를 포함합니다:

1.1 __init__(self)
설명: 큐 객체를 초기화합니다. 내부적으로 deque를 사용하여 큐를 생성합니다.
사용 방법: q = Queue()와 같이 큐 객체를 생성할 때 자동으로 호출됩니다.
1.2 push(self, x)
설명: 정수 x를 큐의 뒤에 추가합니다.
사용 방법: q.push(1)과 같이 호출하여 큐에 정수를 추가합니다.
1.3 pop(self)
설명: 큐의 가장 앞에 있는 정수를 제거하고 그 값을 반환합니다. 큐가 비어있으면 -1을 반환합니다.
사용 방법: result = q.pop()과 같이 호출하여 큐에서 정수를 꺼내고, 결과를 변수에 저장합니다.
1.4 size(self)
설명: 큐에 현재 저장된 정수의 개수를 반환합니다.
사용 방법: count = q.size()와 같이 호출하여 큐의 크기를 확인합니다.
1.5 empty(self)
설명: 큐가 비어있으면 1, 아니면 0을 반환합니다.
사용 방법: is_empty = q.empty()와 같이 호출하여 큐의 비어있음을 확인합니다.
1.6 front(self)
설명: 큐의 가장 앞에 있는 정수를 반환합니다. 큐가 비어있으면 -1을 반환합니다.
사용 방법: front_value = q.front()와 같이 호출하여 큐의 앞쪽 값을 확인합니다.
1.7 back(self)
설명: 큐의 가장 뒤에 있는 정수를 반환합니다. 큐가 비어있으면 -1을 반환합니다.
사용 방법: back_value = q.back()과 같이 호출하여 큐의 뒤쪽 값을 확인합니다.

 

아래의 코드는 Queue()라는 객체를 생성해서 q에 저장해서, 직접 클래스의 메서드를 접근하는 방식이다.

# 큐 객체 생성
q = Queue()

# 정수 추가
q.push(1)  # 큐에 1 추가
q.push(2)  # 큐에 2 추가

# 큐의 상태 확인
print(q.front())  # 출력: 1 (큐의 앞)
print(q.back())   # 출력: 2 (큐의 뒤)
print(q.size())   # 출력: 2 (큐의 크기)
print(q.empty())  # 출력: 0 (큐가 비어있지 않음)

# 정수 꺼내기
print(q.pop())    # 출력: 1 (큐에서 1 제거)
print(q.pop())    # 출력: 2 (큐에서 2 제거)
print(q.pop())    # 출력: -1 (큐가 비어있음)

# 큐의 상태 확인
print(q.size())   # 출력: 0 (큐의 크기)
print(q.empty())  # 출력: 1 (큐가 비어있음)
728x90
반응형

관련글 더보기