본문 바로가기
Program/알고리즘

[백준 알고리즘] 10828번 스택 문제풀이와 설명

by Woodland 2018. 10. 25.

이 문제는 자료구조의 기본적 숙지요소중 하나인 스택에 대한 구현을 요구한다.


상식적인 API를 주고 이에따른 작동 방법을 알려주면 이에 따라 구현하는


프로그래머로 가기 위한 필수! 첫단추같은 문제!


여기서 요구하는 명령어는 총 5가지이다.



  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.


위 조건에 해당하는 명령어들은 이 문제 뿐만아니라 다른 곳에서도 통상적으로 쓰는 스텍의 명령어이다.


각 자료구조는 그 기능의 이름만으로도 이 자료구조가 무엇인지 구분할 수 있도록 이름이 조금씩 다른데, 스텍 자료구조에서는


위와 같은 5가지의 주된 기능으로 불린다.



14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top

예제 출력 1 

2
2
0
2
1
-1
0
1
-1
0
3

이에 대한 나의 풀이는 다음과 같다.

import java.util.Scanner;


public class Main {


public static void main(String[] args) {


Scanner s = new Scanner(System.in);


int n = s.nextInt();                                // 맨 처음에 명령어가 몇개 들어오는지 확인한다.


Stack stack = new Stack(n);


for (int i = 0; i < n; i++) {


String command = s.next();            //명령어를 command로 받아서 아래 문자열과 비교한 뒤 각 메서드를 불러온다.


if(command.equals("push")) {


stack.push(s.nextInt());           


}else if(command.equals("top")) {


stack.top();


}else if(command.equals("pop")) {


stack.pop();


}else if(command.equals("size")) {


stack.size();


}else if(command.equals("empty")) {

stack.empty();

}

}

}


public static class Stack{

int tray [];                                            // 스택을 담을 배열을 먼저 만들어준다.

int size = -1;                                        // 스택의 인덱스 = 배열내 자료의 인덱스이기 때문에 작동의 편의상 0부터 시작.


Stack(int n){

tray = new int[n];                                // 스택 클래스를 생성할때, 크기를 정해서 만들어주는 생성자.

for (int i = 0; i < tray.length; i++)            // 일단 모든 배열의 공간에 -1을 넣어줌. 이는 입력값이 0~정수 값이기 때문.

tray[i] = -1;

}

void push(int x) {

size++;

tray[size] = x;

}

void pop() {

if(size >= 0) {

System.out.println(tray[size]);

tray[size] = -1;

size--;

}else{

System.out.println(-1);

}

}

void size() {

System.out.println(size+1);

}

void empty() {

String stat = (size == -1 ? "1" : "0");       // 삼항 연산자. 사이즈가 -1이면(아무것도 없으면) 1(true) 아니면 0(false)를 반환

System.out.println(stat);

}

void top() {

if(size >= 0) {

System.out.println(tray[size]);

}else{

System.out.println(-1);

}

}

}

}



'Program > 알고리즘' 카테고리의 다른 글

2954번 창영이의 일기장  (0) 2018.11.12
2530번 인공지능 시계  (0) 2018.11.11
4963번 섬의 개수  (0) 2018.11.06