PS 문제풀이

10866번 : 덱

희디 2022. 6. 26. 04:41

class2 silver4 

 

import sys

n_command=int(input())
deque=[]

for k in range(n_command):
    
    command = sys.stdin.readline().split()

    if command[0]=="push_front" :
        deque.insert(0, command[1])

    elif command[0]=="push_back":
        deque.insert(len(deque),command[1])

    elif command[0]=="pop_front":
        if not deque:
            print(-1)
        else :
            print_out=deque[0]
            del deque[0]
            print(print_out)

    elif command[0]=="pop_back":
        if not deque:
            print(-1)
        else:
            out=deque.pop()
            print(out)

    elif command[0]=="size" :
        print(len(deque))

    elif command[0]=="empty":
        if not deque:
            print(1)
        else :
            print(0)

    elif command[0]=="front":
        if not deque:
            print(-1)
        else:
            print(deque[0])

    elif command[0]=="back":
        if not deque:
            print(-1)
        else:
            print(deque[len(deque)-1])

헷갈렸던 포인트는 인덱스에 관한 것이었다. 

일단 코드 설명을 하자면 문제에서 주어진대로 그대로 수행해야한다. 일단 각 n_command의 수 만큼의 command를 입력하고 그에 따른 함수에 대해 설명하겠다. 

 

1) push_front : append가 아닌 insert(0, command[1]) 어느 수이든 가장 앞에 넣어야 하므로, 인덱스값을 지정해서 넣기

2) push_back : 마찬가지로 insert로 넣어주지만, 넣으면서 개수가 한 개 늘어나므로 기존의 길이 len(deque)-1에 1을 더한 값인 len(deque)에 넣어줘야 한다. 

3) pop_front : 인덱스가 0인 값을 삭제해야 하므로, del deque[0]을 이용해서 삭제한다. 삭제하기 전에 먼저 값을 저장해서 삭제된 정확한 값을 출력하도록 한다. 

4) pop_back : 가장 뒤에 있는 수를 출력한다. pop은 삭제되면서 값을 저장할 수 있으므로 리턴값 변수를 지정해서 저장하고 해당 변수를 출력한다. 

5) size : 말 그대로 len(deque)로 사이즈 출력하기 

6) empty : 비어있다면 1, 수가 있으면 0

7) front : 가장 앞의 수, 인덱스가 0인 값을 출력한다. 

8) back : 가장 마지막 인덱스 len(deque)-1을 가진 수를 출력한다.