Computer Science/백준

백준 10866번 덱

Dior2ky 2021. 8. 12. 15:54
반응형

백준 10866번 덱 문제이다.

덱은 큐가 한쪽으로 들어와 반대쪽으로 나가는 것과 다르게 양쪽으로 자유롭게 들어오고 나가고 가능한 구조이다.

 

문제를 보면 

 

총 몇번의 명령을 할지 입력 받고 명령에 따라 수행하면 될 것으로 보인다. 

push 명령의 경우에는 뒤에 숫자를 따로 받기 때문에 각 명령어에 따라 처리를 다르게 해 주면 될것으로 보인다.

 

해결한 코드는 다음과 같다. 

import sys
cycle = int(input())
deq = []
for i in range(cycle):
    ins = sys.stdin.readline().strip()
    if ins == 'pop_front':
        if len(deq) == 0:
            print(-1)
        else:
            print(deq[0])
            del deq[0]
    elif ins == 'pop_back':
        if len(deq) == 0:
            print(-1)
        else:
            print(deq[len(deq)-1])
            del deq[len(deq)-1]
    elif ins == 'size':
        print(len(deq))
    elif ins == 'empty':
        if len(deq) == 0:
            print(1)
        else:
            print(0)
    elif ins == 'front':
        if len(deq) == 0:
            print(-1)
        else:
            print(deq[0])
    elif ins == 'back':
        if len(deq) == 0:
            print(-1)
        else:
            print(deq[len(deq)-1])
    else:
        ins, n = ins.split()
        n = int(n)
        if ins == 'push_front':
            deq.insert(0, n)
        else:
            deq.append(n)

덱은 리스트를 사용해서 앞 뒤로 추가, 삭제등을 사용하여 구현해 주었다.

0번째 자리에 추가해주는 insert 함수, 0번째 자리를 삭제하는 del 등을 사용하면 쉽게 구현이 가능하다. 

덱에 요소가 없다면 -1을 출력하는 예외처리도 신경써서 해줘야 한다. 

 

 

시간초과가 나서 if else만 있으면 시간복잡도가 높지 않은데 왜 초과가 나지? 했는데

검색해보니 input()을 사용하여 입력을 받으면 시간 초과가 난다고 한다. sys.stdin.readline()을 사용해주도록 하자.

그리고 sys.stdin.readline()으로 입력을 받으면 끝에 개행문자까지 입력이 들어오기 때문에 여기서는 strip()를 사용하여 처리해주었다.

 

성공!

반응형