언어/Python

파이썬 알고리즘 - 스택(Stack)을 Set(리스트)으로 구현하기

2017. 8. 29. 21:51

개발자 면접 트레이딩 - 파이썬 알고리즘 문제(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
'언어/Python' 카테고리의 다른 글
  • 파이썬 알고리즘 - 비트 위치 A,B 로 비트열 M을 N으로 삽입
  • 파이썬 알고리즘 - 스택(Stack)으로 큐(Queue)를 구현하기
  • 파이썬 알고리즘 - 스택(Stack)에서 최소값 출력하기
  • 파이썬 알고리즘 - 링크드리스트(LinkedList) 회문(대칭) 출력
[좋은사람]
[좋은사람]
좋은사람의 개발 노트 입니다.
[좋은사람]
좋은사람의 개발 노트
[좋은사람]
전체
오늘
어제
  • 전체보기 (189)
    • 언어 (68)
      • Java (12)
      • Python (39)
      • C# (5)
      • PHP (4)
      • Go (8)
    • OS (18)
      • Linux (7)
      • Windows 10 (5)
      • Etc (6)
    • 빅데이터 & 분석 (8)
      • R (0)
      • Machine Learning (8)
    • 네트워크 (4)
      • Etc (4)
    • 웹 프론트 (25)
      • Javascript & ECMA (8)
      • Vue (13)
      • React (4)
    • 웹 백엔드 (15)
      • Spring (3)
      • Django & Flask (7)
      • Npm & Express (5)
    • 개발도구 (18)
      • Jetbrains (3)
      • Eclipse (5)
      • Git (4)
      • Atom & VScode (6)
    • 데이터베이스 (7)
      • Oracle (2)
      • MariaDB & MySQL (2)
      • Etc (3)
    • 모바일 (6)
      • Android (3)
      • Hybrid (3)
    • 라이프 (20)
      • 여행 & 일상 (6)
      • 취미 (14)

블로그 메뉴

  • 홈으로
  • 블로그소개
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 3DS
  • python
  • go
  • 인텔리j
  • flask
  • ATOM
  • 아톰 에디터
  • OCR
  • Algorithm
  • 2DS
  • npm
  • 커펌
  • C#
  • ps4
  • Java
  • Git
  • 리액트
  • Linux
  • 코딩 면접
  • Django
  • react
  • 미뮤
  • 개발자 면접
  • SpringSTS
  • php
  • Eclipse
  • vue.js
  • Anaconda
  • 윈도우10
  • javascript
  • Thread
  • centos
  • CFW
  • 머신러닝
  • ubuntu
  • 디자인패턴
  • nodejs
  • Database
  • 이클립스
  • windows10

최근 댓글

최근 글

hELLO · Designed By 정상우.
[좋은사람]
파이썬 알고리즘 - 스택(Stack)을 Set(리스트)으로 구현하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.