문제
https://www.acmicpc.net/problem/10866
걸린 시간
-
풀이
Python3
class Node():
def __init__(self, item):
self.item = item
self.link = None
class Deque():
def __init__(self):
self.front = None
self.rear = None
self.search = None
self.count = 0
def empty(self):
if self.front == None:
return 1
else:
return 0
def size(self):
return self.count
def push_front(self, item):
new = Node(item)
self.count += 1
if self.empty():
self.front = new
self.rear = new
else:
tmp = self.front
self.front = new
new.link = tmp
def push_back(self, item):
new = Node(item)
self.count += 1
if self.empty():
self.front = new
self.rear = new
else:
self.rear.link = new
self.rear = new
def pop_front(self):
tmp = self.front
if self.empty():
return -1
else:
item = self.front.item
self.front = tmp.link
if self.front == None:
self.rear = None
self.count -= 1
return item
def pop_back(self):
if self.empty():
return -1
else:
item = self.rear.item
if self.count < 2:
self.front = None
self.rear = None
else:
self.search = self.front
for i in range(0, self.count-2):
self.search = self.search.link
self.rear = self.search
self.rear.link = None
self.count -= 1
return item
def _front_(self):
if self.empty():
return -1
else:
return self.front.item
def _back_(self):
if self.empty():
return -1
else:
return self.rear.item
if __name__ == "__main__":
N = int(input())
command = [input() for _ in range(0, N)]
D = Deque()
for i in command:
c = i.split(' ')
if c[0] == "push_back":
D.push_back(c[1])
elif c[0] == "push_front":
D.push_front(c[1])
elif c[0] == "front":
print(D._front_())
elif c[0] == "back":
print(D._back_())
elif c[0] == "size":
print(D.size())
elif c[0] == "empty":
print(D.empty())
elif c[0] == "pop_front":
print(D.pop_front())
elif c[0] == "pop_back":
print(D.pop_back())
덱 자료구조는 보통 이중 연결 리스트로 구현된다고 한다. 덱을 구현해보지 않은 상태에서 큐와 스택 개념을 이용해 단순 연결 리스트로 구현했기에 통과는 했지만 비효율적이다.
'Baekjoon' 카테고리의 다른 글
| Baekjoon 2231번 분해합 (0) | 2020.07.26 |
|---|---|
| Baekjoon 10989번 수 정렬하기 3 (0) | 2020.07.26 |
| Baekjoon 2798번 블랙잭 (0) | 2020.07.26 |
| Baekjoon 10250번 ACM 호텔 (0) | 2020.07.26 |
| Baekjoon 2839번 설탕 배달 (0) | 2020.07.26 |
댓글