이 문제는 자료구조의 기본적 숙지요소중 하나인 스택에 대한 구현을 요구한다.
상식적인 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 |