[python_파이썬_pass]백준_10845번_큐_실버4_풀이

2024. 10. 10. 20:56코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/slUxXU5NCUQ?feature=shared

 

24년 10월 10일 회사 러닝타임 및 점심시간 활용 풀이

 

<첫번째 시도 : 맞았습니다.>

리스트 변수를 두고 append()와 pop()으로 문제 해결

import sys
input = sys.stdin.readline

N = int(input())
queue = []

for _ in range(N):
    command = list(input().split())
    if command[0] == "push":
        queue.append(command[1])
    elif command[0] == "pop":
        if len(queue) == 0:
            print(-1)
        else:
            print(queue.pop(0))
    elif command[0] == "size":
        print(len(queue))
    elif command[0] == "empty":
        if len(queue) == 0:
            print(1)
        else:
            print(0)
    elif command[0] == "front":
        if len(queue) == 0:
            print(-1)
        else:
            print(queue[0])
    elif command[0] == "back":
        if len(queue) == 0:
            print(-1)
        else:
            print(queue[-1])

 

<두번째 시도 : 맞았습니다.>

deque라이브러리를 사용해서 해결했다. 리스트랑 코드는 거의 동일하지만 시간복잡도에서 deque가 효율적이다.

 

  • 리스트에서 pop(0)은 O(N) 이므로 데이터가 많아질수록 성능이 떨어집니다.
  • deque의 popleft()는 O(1) 이므로 많은 데이터를 다룰 때 훨씬 더 효율적입니다.

 

from collections import deque
input = sys.stdin.readline

# 그냥 리스트로 할때보다 시간이 더 걸리네?
N = int(input())
d = deque()

for _ in range(N):
    cmd = list(input().split())
    if cmd[0] == "push":
        d.append(cmd[1])
    elif cmd[0] == "pop":
        if len(d) == 0:
            print(-1)
        else:
            print(d.popleft()) #pop(0)으로 하니까 런타임 에러
    elif cmd[0] == "size":
        print(len(d))
    elif cmd[0] == "empty":
        if len(d) == 0:
            print(1)
        else:
            print(0)
    elif cmd[0] == "front":
        if len(d) == 0:
            print(-1)
        else:
            print(d[0])
    elif cmd[0] == "back":
        if len(d) == 0:
            print(-1)
        else:
            print(d[-1])
728x90
반응형