본문 바로가기

# 소쿠리 개발 공부방/코테 문제풀이

[BAEKJOON] [10845] 큐: PYTHON

[10845] 큐

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

Input

  • 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)
  • 둘째 줄부터 N개의 줄에는 명령이 하나씩
  • 어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다

Output

  • 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력

 

✨ Solve

  • 배열을 통한 큐 구현
    • 숫자를 담을 큰 배열 한개, head & tail 인덱스를 담을 변수 두개 필요
    • tail 인덱스는 다음에 삽입되어야 할 숫자가 들어가야할 인덱스 위치를 가르키고 있음
    • head 인덱스는 제거되야 할 숫자의 인덱스 윛치를 가르키고 있음
    • 원소의 개수는 (tail 인덱스) - (head 인덱스)

 

💻 Code

### 언어 python3, 메모리 31256KB, 시간 52ms

queue = [0 for i in range(10005)]
head = 0
tail = 0

def push(x: int):
    global head, tail

    queue[tail] = x
    tail += 1

def pop():
    global head, tail
    if empty() == 1:
        return -1

    head += 1
    return queue[head-1]

def front():
    global head, tail
    if empty() == 1:
        return -1

    return queue[head]

def back():
    global head, tail
    if empty() == 1:
        return -1

    return queue[tail-1]

def size():
    global head, tail
    return tail - head 

def empty():
    global head, tail
    if tail == head:
        return 1
    else:
        return 0

import sys

n = int(input())
while n > 0:
    line = sys.stdin.readline().rstrip().split()
    c = line[0]
    if c == 'push':
        push(line[1])
    elif c=='pop':
        print(pop())
    elif c=='size':
        print(size())
    elif c=='empty':
        print(empty())
    elif c=='front':
        print(front())
    elif c=='back':
        print(back())

    n -= 1

 

🎯 Question

없음