코딩테스트 준비/백준

[백준] 10845번 큐 - Python(파이썬)

youjin86 2021. 7. 22. 01:16

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

 

10845번: 큐

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

www.acmicpc.net

 

문제

 

21.02.12 접근법

 

큐는 줄서기로, 먼저 들어온 것이 먼저 나간다.

때문에 popleft가 있는 deque을 사용해서 하는 것이 좋다고 판단

 

 

21.02.12 코드

import sys
from collections import deque

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

for i in range(N):
    comd=sys.stdin.readline().split()

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

 

21.07.20 접근법

 

deque(데크) 사용 : 왼쪽에서도 pop을 해야했기 때문에

deque가 list보다 시간복잡도가 나음.

같은 append,pop같은 경우 list의 경우 O(n)이지만, deque는 O(1)

 

2월에 한 코드와 비교해보니 2월엔 if-else문을 사용했고, 7월엔 try-except문 사용

시간 체크해보니 2월의 시간이 더 빨랐음.

 

결론; try-except문보단 if-else문을 사용하기!

 

 

21.07.20 코드

import sys
from collections import deque

deq=deque()

N=int(input())

for _ in range(N):
    cmd=sys.stdin.readline().strip().split()

    if cmd[0]=='push':
        deq.append(int(cmd[1]))

    elif cmd[0]=='pop':
        try:
            print(deq.popleft())
        except:
            print(-1)
 
    elif cmd[0]=='size':
        print(len(deq))

    elif cmd[0]=='empty':
        if deq:
            print(0)
        else:
            print(1)

    elif cmd[0]=='front':
        try:
            print(deq[0])
        except:
            print(-1)

    elif cmd[0]=='back':
        try:
            print(deq[-1])
        except:
            print(-1)