본문 바로가기
ALGORITHM/BAEKJOON

[BOJ/Python] 18258. 큐2

by 안녕나는현서 2021. 8. 9.
728x90

📌 문제

https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

 

📌 문제 접근 방법

  1. 다른 사람의 정답 코드를 보지 않으려고 온갖 시도를 다 해봤다!!!
    • append가 문제일까 싶어서 que를 리스트가 아닌 문자열로도 받아보고,
    • pop 대신 슬라이싱을 사용해보고 등등
    • 파이썬 함수의 시간 복잡도를 찾아보면서 정말 온갖 시도를 해보다가 안되길래 찾아봤더니 이건 결국 deque를 사용해서 풀어야하는 것..!
  2. 근데 좀 더 찾아보니 deque 없이도 풀이한 문제가 있길래 따라해봤더니 이것도 성공!

 

📌 코드

- deque 사용

import sys
from collections import deque

N = int(sys.stdin.readline())

que = deque([])

for _ in range(N) :
    input = sys.stdin.readline()
    command = input.split()

    if command[0] == 'push' :
        que.append(command[1])
    elif command[0] == 'pop' :
        if que :
            print(que.popleft())
        else :
            print(-1)
    elif command[0] == 'size' :
        print(len(que))
    elif command[0] == 'empty' :
        if que :
            print(0)
        else :
            print(1)
    elif command[0] == 'front' :
        if que :
            print(que[0])
        else :
            print(-1)
    elif command[0] == 'back' :
        if que :
            print(que[-1])
        else :
            print(-1)

 

- deque 사용안하고 풀기

import sys

N = int(sys.stdin.readline())

que = []

cnt = 0

for _ in range(N) :
    input = sys.stdin.readline()
    command = input.split()

    if command[0] == 'push' :
        que.append(command[1])
    elif command[0] == 'pop' :
        if len(que) > cnt :
            print(que[cnt])
            cnt += 1
        else :
            print(-1)
    elif command[0] == 'size' :
        print(len(que)-cnt)
    elif command[0] == 'empty' :
        if len(que) > cnt :
            print(0)
        else :
            print(1)
    elif command[0] == 'front' :
        if len(que) > cnt :
            print(que[cnt])
        else :
            print(-1)
    elif command[0] == 'back' :
        if len(que) > cnt :
            print(que[-1])
        else :
            print(-1)
728x90

'ALGORITHM > BAEKJOON' 카테고리의 다른 글

[BOJ/Python] 17413. 단어 뒤집기 2  (0) 2021.08.16
[BOJ/Python] 1120. 문자열  (0) 2021.08.16
[BOJ/Python] 4949. 균형잡힌 세상  (0) 2021.08.09
[BOJ/Python] 10828. 스택  (0) 2021.08.09
[BOJ/Python] 10818. 최소, 최대  (0) 2021.07.27

댓글