본문 바로가기
알고리즘/BOJ

[BOJ] 10866. 덱

by ㅣlㅣl 2022. 9. 7.

문제

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

 

10866번: 덱

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

www.acmicpc.net

 

 


 

주요 아이디어

덱 구현 문제이다. 큐와 거의 유사하게 구현했다!

 


 

코드 구현 (Python 3)

더보기

 

# 덱
'''
큐 문제에서 메서드만 변경/추가하면 될 것 같다!
반복 입력 작성 시 sys.stdin.readline() 사용 잊지 말 것!
'''

import sys
input=sys.stdin.readline

global f, r
deque = []

# push
def push_front(X):
    # 한 칸씩 뒤로 밀고 맨 앞에 추가하기
    deque.append(0)
    for i in range(r+1, f+1, -1):
        deque[i] = deque[i-1]

    deque[f+1] = X
    return

def push_back(X):
    deque.append(0) # 여기서 런타임 에러 발생.
		# 원소 추가하는거니까 무조건 append 해주기
    deque[r+1] = X
    return

# pop
def pop_front():
    if r-f == 0:
        print(-1)
    else:
        print(deque[f+1])
        # 그냥 del 하면 위치 밀리니까 0으로 대체하자
        deque[f+1] = 0
    return

def pop_back():
    if r-f == 0:
        print(-1)
    else:
        print(deque[r])
        # 그냥 del 하면 위치 밀리니까 0으로 대체하자
        deque[r] = 0
    return

# size
def size():
    print(r-f)
    return

# empty
def empty():
    if r-f == 0:
        print(1)
    else:
        print(0)
    return

# front
def front():
    if r-f == 0:
        print(-1)
    else:
        print(deque[f+1])
    return

# back
def back():
    if r-f == 0:
        print(-1)
    else:
        print(deque[r])
    return

N = int(input()) # 커맨드 개수
f = -1
r = -1

for i in range(N):
    cmd = input().split()
    if cmd[0] == 'push_front':
        push_front(int(cmd[1]))
        r += 1
    elif cmd[0] == 'push_back':
        push_back(int(cmd[1]))
        r += 1

    elif cmd[0] == 'pop_front':
        pop_front()
        if r-f > 0:
            f += 1

    elif cmd[0] == 'pop_back':
        pop_back()
        if r-f > 0:
            r -= 1

    elif cmd[0] == 'size':
        size()
    elif cmd[0] == 'empty':
        empty()
    elif cmd[0] == 'front':
        front()
    elif cmd[0] == 'back':
        back()
    else:
        print('error occured')
        break
    #print('deque : ', deque)
    #print('f : ', f, 'r : ', r)

 

 

 

 


 

제출 결과

 


 

코드 개선 방안

https://ll2ll.tistory.com/10?category=956602 

 

[자료구조] 07. 큐 (Queue) & 덱 (Dequeue)

사담 공간 스택과 비슷하면서도 다른 자료구조인 큐에 대해 알아보자 키워드 #큐 #선입선출 #FIFO #덱 1. 큐 개념 큐(Queue)는 먼저 집어넣은 데이터가 먼저 나오는 구조(FIFO)로 되어있다. 큐의 핵심

ll2ll.tistory.com

 

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 14502. 연구소  (0) 2024.04.06
[BOJ] 1260. DFS와 BFS  (0) 2024.04.01
[BOJ] 10845. 큐  (0) 2022.09.07
[BOJ] 10828. 스택  (0) 2022.09.07
[BOJ] 10816. 숫자카드 2  (0) 2022.09.07