[BOJ] 10845: 큐

이슬비·2022년 3월 28일
0

Algorithm

목록 보기
21/110
post-thumbnail

뿌듯하군. 오늘은 한 번에 맞았다 ~~~ 그도 당연할 것이 자료구조만 달라지고 문제 로직 (?)은 똑같았기 때문 ^6^...

10845: 큐

1. 내 풀이: 성공

import sys

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

Queue = []
for _ in range(N):
    order = sys.stdin.readline().strip().split()
    if order[0] == 'push':
        Queue.append(order[1])
    elif order [0] == 'pop':
        if len(Queue) == 0:
            print(-1)
        else:
            print(Queue[0])
            Queue.remove(Queue[0])
    elif order[0] == 'size':
        print(len(Queue))
    elif order[0] == 'empty':
        if len(Queue) == 0:
            print(1)
        else:
            print(0)
    elif order[0] == 'front':
        if len(Queue) != 0:
            print(Queue[0])
        else:
            print(-1)
    elif order[0] == 'back':
        if len(Queue) !=0:
            print(Queue[-1])
        else:
            print(-1)

그냥 생각나는대로 적어보았다. 바로바로 슉슉...
사실 처음에 큐라는 사실을 까먹고 pop 연산을 Queue.pop()으로 썼다. 이렇게 되면 stack에서의 pop 연산이기 때문에...! 문제의 조건과 맞지 않았다. 그래서 들어온 순서대로 차례차례 출력하고 없애는 반복을 하도록 했다.

나머지는 너무 당연해서 더 설명할 게 없군...

2. 다른 풀이

from sys import stdin

N = int(stdin.readline())
Que = []
for i in range(N) :
    A = stdin.readline().split()

    if A[0] == 'push' : Que.append(A[1])

    elif A[0] == 'pop' : 
        if Que : print(Que.pop(0))
        else : print(-1)

    elif A[0] == 'size' : print(len(Que))

    elif A[0] == 'empty' :
        if len(Que) == 0 : print(1)
        else : print(0)
            
    elif A[0] == 'front' :
        if len(Que) == 0 : print(-1)
        else : print(Que[0])
    
    elif A[0] == 'back' :
        if len(Que) == 0 : print(-1)
        else : print(Que[-1])

오호 pop 연산을 저렇게 구현할 수도 있구나...! 애초에 인덱스를 확정해서 빼기! 어짜피 pop 연산은 출력은 물론 그 값을 삭제도 해야하니까 저렇게 하면 시간이나 메모리 측면에서 더 이득이지 않을까 생각했다.

4ms 빨라졌다 ...^^ 그래도 빨라진 게 어디야.
오늘도 새로운 사실을 알았구마 ~~~

오늘도 신기한 알고리즘의 세계 끝!

profile
정말 알아?

0개의 댓글