Guest User

Untitled

a guest
Feb 25th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. class doubleLinkedListElement():
  2. def __init__(self):
  3. self.value = None
  4. self.next = None
  5. self.prev = None
  6.  
  7. class doubleLinkedList():
  8. def __init__(self):
  9. self.start = None
  10. self.end = None
  11.  
  12. def insert(self, x, idx = "end"):
  13. order = doubleLinkedListElement()
  14. order.value = x
  15. if self.start:
  16. if idx == "end":
  17. self.end.next = order
  18. order.prev = self.end
  19. self.end = order
  20. else:
  21. cur = self.start
  22. i = 1
  23. while i < idx-1:
  24. cur = cur.next
  25. i += 1
  26. order.prev = cur
  27. order.next = cur.next
  28. cur.next.prev = order
  29. cur.next = order
  30. else:
  31. self.start = order
  32. self.end = order
  33.  
  34. def remove(self, x):
  35. tmp = self.start
  36.  
  37. if tmp.value == x:
  38. self.start.value = None
  39. self.start = self.start.next
  40. else:
  41. while tmp.next:
  42. if tmp.next.value == x:
  43. if tmp.next.next:
  44. tmp.next.value = None
  45. tmp.next = tmp.next.next
  46. else:
  47. tmp.next = None
  48. self.end = tmp
  49. break
  50. else:
  51. tmp = tmp.next
  52.  
  53. def getIdx(self, x):
  54. cur = self.start
  55. idx = 1
  56. while cur is not None:
  57. if cur.value == x:
  58. return idx
  59. else:
  60. cur = cur.next
  61. idx += 1
  62. else:
  63. return -1
  64.  
  65. def getValue(self, x):
  66. cur = self.start
  67. idx = 1
  68. while cur is not None:
  69. if idx == x:
  70. return cur.value
  71. else:
  72. idx += 1
  73. cur = cur.next
  74. #insert(x, n), remove(x), getIdx(x), getValue(x)
  75.  
  76. class Stack2:
  77. def __init__(self):
  78. self.myStack = doubleLinkedList()
  79.  
  80. def push(self, n):
  81. self.myStack.insert(n)
  82.  
  83. def pop(self):
  84. cur = self.myStack.end.prev
  85. self.myStack.end.value = None
  86. cur.next = None
  87. self.myStack.end = cur
  88.  
  89. def size(self):
  90. idx = 1
  91. cur = self.myStack.start
  92. while cur.next is not None:
  93. idx += 1
  94. cur = cur.next
  95. return idx
  96.  
  97. def empty(self):
  98. if self.myStack.start is None:
  99. return True
  100. else:
  101. return False
  102.  
  103. def top(self):
  104. return self.myStack.end.value
  105.  
  106. class myDatabase:
  107. '''
  108. 해싱을 구현합니다
  109. '''
  110.  
  111. def __init__(self, size) :
  112. '''
  113. dictionary를 이용합니다.
  114.  
  115. 이곳은 수정하지 마세요.
  116. '''
  117. self.myData = {}
  118.  
  119. def put(self, key, value) :
  120. '''
  121. (key, value)를 저장합니다.
  122. '''
  123. self.myData[key] = value
  124.  
  125. def get(self, key) :
  126. '''
  127. key에 해당하는 value를 반환합니다. 만약 key에 해당하는 value가 없다면 -1을 반환합니다.
  128. '''
  129. if key in self.myData:
  130. return self.myData[key]
  131. else:
  132. return -1
  133. #return self.myData.get(key, -1)
  134.  
  135. class orderInfo:
  136. '''
  137. 이 부분은 수정하지 마세요.
  138. '''
  139. def __init__(self, t, d, v):
  140. self.time = t
  141. self.duration = d
  142. self.vip = v
  143.  
  144. def processOrder(orders) :
  145. '''
  146. 주문 정보가 주어질 때, 주문이 처리되는 순서를 출력합니다.
  147. '''
  148. process = []
  149. result = []
  150. for i in range(len(orders)):
  151. if result is None:
  152. result.append(i+1)
  153. process.append(orders[i].time)
  154. else:
  155. result.append(i+1)
  156. process.append(max(orders[i-1].time + orders[i-1].duration, orders[i].time))
  157.  
  158. for i in range(len(orders)):
  159. j = 1
  160. count = 0
  161. if orders[i].vip == 1:
  162. while j < i:
  163. if orders[j].vip == 0 and process[j] > orders[i].time :
  164. result[j] = result[j]+1
  165. process[i] = min(process[i], process[j])
  166. if j == 1:
  167. process[j] = process[i] + orders[i].duration
  168. else:
  169. process[j] = max(process[j-1]+orders[j-1].duration, orders[j].time)
  170. j += 1
  171. count += 1
  172. else:
  173. j += 1
  174. result[i] = result[i] - count
  175. i += 1
  176. else:
  177. i += 1
  178.  
  179. return result;
  180.  
  181.  
  182.  
  183. def processOrder(orders):
  184. result = []
  185. result2 = []
  186. vipQue = []
  187. normQue = []
  188.  
  189. for i in range(len(orders)):
  190. if orders[i].vip == 0:
  191. if normQue is None:
  192. normQue.append([i+1, orders[i].time])
  193. else:
  194. tmp = max(normQue[-1][1] + orders[normQue[-1][0]-1].duration, orders[i].time) #왜 index out of range ㅇ에러가 ....!?
  195. normQue.append([i+1, tmp])
  196. else:
  197. if vipQue is None:
  198. vipQue.append([i+1, orders[i].time])
  199. else:
  200. tmp = max(vipQue[-1][1] + orders[vipQue[-1][0]-1].duration, orders[i].time)
  201. vipQue.append([i+1, tmp])
  202.  
  203. for i in range(len(vipQue)):
  204. for j in range(len(normQue)):
  205. if vipQue[i][1] <= normQue[j][1]:
  206. result.append(vipQue[i][0])
  207. else:
  208. result.append(normQue[i][0])
  209.  
  210. for i in range(len(result)):
  211. result2.append(result.index(i+1)+1)
  212.  
  213.  
  214.  
  215.  
  216. data1 = orderInfo(1,4,0)
  217. data2 = orderInfo(3,1,0)
  218. data3 = orderInfo(4,1,0)
  219. data4 = orderInfo(5,4,1)
  220. data5 = orderInfo(6,5,0)
  221. data6 = orderInfo(7,4,0)
  222. data7 = orderInfo(9,4,1)
  223. data8 = orderInfo(13,4,1)
  224. data9 = orderInfo(17,4,1)
  225.  
  226. orders = [data1, data2, data3, data4, data5, data6, data7, data8, data9]
  227.  
  228. processOrder(orders)
Add Comment
Please, Sign In to add comment