로그인 바로가기 하위 메뉴 바로가기 본문 바로가기

데이터 구조 및 분석: Linear Structure and Dynamic Programming

임시 이미지 KAIST 산업및시스템공학과 문일철
http://kooc.kaist.ac.kr/datastructure-2019s/forum/124253
좋아요 1779 수강생 3367

안녕하세요. 

실습영상을 보는데 제가 작성한 코드와 교수님의 코드가 몇 가지 다른 점이 있어 질문드립니다.

1) ProductionList.py의 removeLast(), removeFirst(), 그리고 getSize() 관련 질문입니다.

교수님께서는 해당 코드 작성시 if조건과 While 반복문의 조건에서 모두 node의 strSerialNunumber변수가 'head' 혹은 'tail'이 아닌 경우로 설정하였습니다. 그런데, 저는 node의 변수를 사용하지 않고 node 자체를 self.nodeHead 혹은 self.nodeTail로 사용하였는데 이렇게 하면 문제가 발생하나요? 예를 들면, 저는 각 함수의 if 조건문과 While 반복문의 조건을 모두 다음과 같이 작성하였습니다.

def removeLast(self):

  removedNode = self.nodeTail.getPrevNode()

  if removedNode != self.nodeHead:

  ...

def removeFirst(self):

  removedNode = self.nodeHead.getNextNode()

  if removedNode != self.nodeTail:

  ...

def getSize(self):

  node = self.nodeHead.getNextNode()

  cnt = 0

  while node != self.nodeTail:

    node = node.getNextNode()

    cnt = cnt +1

  return cnt

이렇게 작성하였을 때 run.py를 실행하면, 잘 작동하다가 마지막에  getSize()와 관련하여 'AttributeError: 'NoneType' object has no attribute 'getNextNode' 오류가 나옵니다. 교수님 코드대로 getSize()의 While 조건을 node.strSerialNumber를 사용하면 정상적으로 작동합니다. 또, 이상한 건 removeLast()와 removeFirst()는 제 방식대로 작성하고, getSize()만 교수님 코드대로 작성하면 정상적으로 작동합니다. 이 원인에 대한 답변 부탁드립니다.


2) Queue.py 관련 질문드립니다.

교수님께서 강의영상에서 설명하시길, Stack은 Last comes First out이라고 설명하셨고, 그렇기 때문에 Stack.py의 add()는 addFirst()함수를 사용하고, get()은 removeFirst()를 사용하는 것이라고 이해하였습니다. 그런데 이 논리에 따르면, Queue는 First comes First out이니까 add()는 addFirst()를 사용하고, get()은 removeLast()를 사용해야 하는 것 아닌가요? 왜냐하면 Queue는 node가 제거될 때 가장 앞에 있는, 즉 nodeTail 직전의 node가 먼저 제거되어야 하는 것 아닌가요?