Skip to content

문제 15 · 스택 클래스 UML과 구현

문제 15 [5점]

아래 스택stack 자료구조에 대한 설명을 토대로, 스택을 클래스로 정의하기 위한 UMLUnified Modelling Language 다이어그램을 그린 후, 스택 클래스에 대한 코드 혹은 의사알고리즘을 작성하시오.

스택은 임의의 배열이며, 삽입과 삭제가 반드시 하나의 위치에서만 이루어지는 자료구조이다. 스택은 먼저 입력된 요소가 나중에 출력되는 후입선출last in, first out의 특성을 가진다. 스택에는 다음 5가지 행동action이 들어갈 수 있다.

  1. 새로운 요소를 입력하는 push
  2. 요소를 제거하는 pop
  3. 다음에 제거될 요소를 출력하는 top
  4. 현재 스택의 사이즈를 반환하는 getSize
  5. 현재 스택이 비어있는지 여부를 반환하는 isEmpty
풀이 및 해설

UML 클래스 다이어그램

배열 arr과 최상단 인덱스 topIndex를 비공개(-) 필드로 두고, 5가지 행동을 공개(+) 메서드로 둡니다. (-는 private, +는 public을 뜻합니다.)

+------------------------------------+
|               Stack                |
+------------------------------------+
| - arr : int[]                      |
| - topIndex : int                   |
+------------------------------------+
| + push(value : int) : void         |
| + pop() : int                      |
| + top() : int                      |
| + getSize() : int                  |
| + isEmpty() : bool                 |
+------------------------------------+
구분이름설명
필드arr요소를 담는 배열
필드topIndex최상단 요소의 인덱스(비었으면 -1)
메서드push(value)topIndex를 1 늘리고 그 자리에 값 저장
메서드pop()최상단 요소를 반환하고 topIndex를 1 줄임
메서드top()최상단 요소를 반환(제거하지 않음)
메서드getSize()요소 개수 = topIndex + 1 반환
메서드isEmpty()topIndex == -1 여부 반환

스택 클래스 코드

삽입·삭제가 모두 topIndex 한 위치에서만 일어나므로 후입선출이 자연스럽게 성립합니다.

cpp
class Stack {
private:
    int arr[100];      // 요소 배열
    int topIndex;      // 최상단 인덱스, 비었으면 -1
public:
    Stack() : topIndex(-1) {}

    void push(int value) { arr[++topIndex] = value; }  // 넣고 위로
    int  pop()           { return arr[topIndex--]; }   // 빼고 아래로
    int  top()           { return arr[topIndex]; }     // 최상단 확인
    int  getSize()       { return topIndex + 1; }
    bool isEmpty()       { return topIndex == -1; }
};

pushpop 순서로 여러 값을 넣고 빼면 가장 나중에 넣은 값이 가장 먼저 나옵니다.

👉 실습(C++)에서 확인하기

PDF