[백준] 10866 - 덱 (Python)

민영·2021년 7월 28일
0

[Algorithm] 백준

목록 보기
7/31
post-thumbnail

문제

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

제출 코드

import sys

testCase = int(sys.stdin.readline())
deque = []
result = []

for i in range(testCase):
    line = sys.stdin.readline().split()

    if line[0] == 'push_front':
        deque.insert(0, line[1])

    elif line[0] == 'push_back':
        deque.append(line[1])

    elif line[0] == 'pop_front':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque.pop(0))

    elif line[0] == 'pop_back':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque.pop())

    elif line[0] == 'size':
        result.append(len(deque))

    elif line[0] == 'empty':
        if len(deque) != 0:
            result.append(0)
        else:
            result.append(1)

    elif line[0] == 'front':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque[0])
            
    elif line[0] == 'back':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque[-1])

for i in result:
    print(i)

결과


정리

개념

지금까지 리스트를 활용한 문제에서 요소를 추가할 때 뒤에 추가했기 때문에 append(리스트 마지막에 요소 추가)만 사용했었다. 하지만 이 문제에서는 "push_front X: 정수 X를 덱의 앞에 넣는다." 때문에 요소를 리스트의 맨 앞에 추가해야된다. push_front를 수행하기 위해서 insert를 사용했다. insert는 "리스트이름.insert(index, 값)" 형태로 사용하는데 괄호안에는 '리스트의 몇번째 index에 어떤 값을 넣을지' 써준다고 생각하면 쉽다. 아래 코드에서 insert를 사용했다.

    # push_front X: 정수 X를 덱의 앞에 넣는다.
    if line[0] == 'push_front':
        deque.insert(0, line[1]) # deque라는 리스트 0번째에 line[1]값 추가

주석있는 코드

import sys

testCase = int(sys.stdin.readline())
deque = []
result = []

for i in range(testCase):
    line = sys.stdin.readline().split()

    # push_front X: 정수 X를 덱의 앞에 넣는다.
    if line[0] == 'push_front':
        deque.insert(0, line[1]) # deque라는 리스트 0번째에 line[1]값 추가

    # push_back X: 정수 X를 덱의 뒤에 넣는다.
    elif line[0] == 'push_back':
        deque.append(line[1])

    # pop_front
    # 덱의 가장 앞에 있는 수를 빼고 그 수를 출력 + 만약 덱에 들어있는 정수가 없는 경우에는 -1 출력
    elif line[0] == 'pop_front':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque.pop(0))

    # pop_back
    # 덱의 가장 뒤에 있는 수를 빼고 그 수를 출력 + 만약 덱에 들어있는 정수가 없는 경우에는 -1 출력
    elif line[0] == 'pop_back':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque.pop())

    # size: 덱에 들어있는 정수의 개수를 출력
    elif line[0] == 'size':
        result.append(len(deque))

    # empty: 덱이 비어있으면 1 아니면 0을 출력
    elif line[0] == 'empty':
        if len(deque) != 0:
            result.append(0)
        else:
            result.append(1)

    # front
    # 덱의 가장 앞에 있는 정수를 출력 + 만약 덱에 들어있는 정수가 없는 경우에는 -1 출력
    elif line[0] == 'front':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque[0])

    # back
    # 덱의 가장 뒤에 있는 정수를 출력 + 만약 덱에 들어있는 정수가 없는 경우에는 -1 출력
    elif line[0] == 'back':
        if len(deque) == 0:
            result.append(-1)
        else:
            result.append(deque[-1])

# 결과 출력
for i in result:
    print(i)

느낀점

비교적 수월하게 한 것 같다.

profile
그날의 기록

0개의 댓글

관련 채용 정보