개발자 면접 트레이딩 - 파이썬 알고리즘 문제(12)
(1). 개발자 면접 트레이닝 - 스택(Stack)을 Set(리스트)으로 구현하기
① 스택(Stack) 구조 이해하는 것이 중요
② Push, Pop, Peek 개념 파악 후 아래 코드 실습
③ 스택 공간에 데이터가 가득 찰 경우 스택 자체를 리스트로 구성
④ 예를들어 스택 사이즈가 3 이라면 [2, 3, 7, 9, 12] 의 스택리스트는 [2, 3, 7] , [9, 12] -> 2개로 구성
(2). 소스 코드
PYTHON
#list_of_stack.py
import unittest
class Stack:
def __init__(self):
self.items = []
self.max = 3
def push(self, item):
self.items.append(item)
def pop(self):
self.items.pop()
def print_stack(self):
print(self.items)
def peek(self):
return self.items[len(self.items) - 1]
def is_empty(self):
return self.items == []
def size(self):
return len(self.items)
class Stacks():
def __init__(self):
self.stacklist = []
self.max_stack_size = 3
#처음 스택을 첫 리스트에 삽입
self.stacklist.append(Stack())
def push(self, item):
st = self.getLastStack();
if self.max_stack_size == st.size():
new_st = Stack()
new_st.push(item)
self.stacklist.append(new_st)
else:
st.push(item)
def pop(self):
st = self.getLastStack();
if st.is_empty():
self.stacklist.pop()
st = self.getLastStack();
st.pop()
else:
st.pop()
def getLastStack(self):
return self.stacklist[len(self.stacklist)-1]
def getStacksCount(self):
return len(self.stacklist)
def printStacks(self):
result = []
for st in self.stacklist:
for item in st.items:
result.append(item)
return result
class test(unittest.TestCase):
def test(self):
stacks = Stacks()
stacks.push(5)
stacks.push(3)
stacks.push(2)
stacks.push(7)
self.assertEqual([5, 3, 2, 7], stacks.printStacks())
self.assertEqual(3, stacks.getStacksCount())
stacks.pop()
self.assertEqual([5, 3, 2], stacks.printStacks())
stacks.pop()
self.assertEqual([5, 3], stacks.printStacks())
self.assertEqual(1, stacks.getStacksCount())
unittest.main()
(3). 소스 코드 분석
① 7 라인 : 스택 클래스(Class) 선언
② 34 라인 : 스택 리스트 클래스 선언
③ 44 라인 : 스택리스트에서 head 스택을 pop 후 사이즈 비교
④ 63 라인 : 스택리스트에서 마지막 스택을 가져오는 메소드 선언
⑤ 70 라인 : 스택리스트에서 스택을 꺼내온 후 단일 스택으로 구성 후 출력
⑥ 78 ~ 끝 : 스택에 데이터 삽입 후 assertEqula 단위 테스트 함수를 사용하여 스택리스트 확인 및 데이터 비교
자료구조의 Stack(스택) 은 정말 중요한 개념이며, 응용 분야는 관련 검색을 통해 자세히 알아보자.
(4). 실행결과1 - 단위테스트 정상 출력(스택(Stack) 리스트 값 결과 같을 경우)
(5). 실행결과2 - 단위테스트 에러 출력(스택(Stack) 리스트 값 결과 다를 경우)
'언어 > Python' 카테고리의 다른 글
파이썬 알고리즘 - 비트 위치 A,B 로 비트열 M을 N으로 삽입 (0) | 2017.09.03 |
---|---|
파이썬 알고리즘 - 스택(Stack)으로 큐(Queue)를 구현하기 (0) | 2017.08.31 |
파이썬 알고리즘 - 스택(Stack)에서 최소값 출력하기 (0) | 2017.08.28 |
파이썬 알고리즘 - 링크드리스트(LinkedList) 회문(대칭) 출력 (0) | 2017.08.27 |
파이썬 알고리즘 - 두 링크드리스트(LinkedList)의 합(SUM) 계산 (0) | 2017.08.25 |