문제
https://www.acmicpc.net/problem/10866
주요 아이디어
덱 구현 문제이다. 큐와 거의 유사하게 구현했다!
코드 구현 (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
'알고리즘 > 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 |