한 걸음 두 걸음
baekjoon 백준 문제풀기 ] 10828 스택! (JAVA) 본문
반응형
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
java.util.stack에서 제공하는 라이브러리를 활용하여 문제를 풀었다.
스택 자료구조는 import java.util.stack;에 있고 이는 java documentation에 잘 나와있다.
제공하는 메소드는 push, pop, peek, empty, search 등이 있으며 사용방법은 다음과 같다.
- Stack 객체 만들기 : Stack stack = new Stack<>();
- push 함수 : stack.push(데이터); //데이터 자료형 맞춰주어야함
- pop 함수 : stack.pop(); //만약 data가 없을 때 pop하면 EmptyStackException 발생
- peek 함수 : stack.peek(); // 만약 data가 없을 때 peek EmptyStackException 발생
- empty 함수 : stack.empty(); // 비어있으면 true 뭔가 차있으면 false
- search 함수 : stack.search(index); //index번째에 있는 element값을 보여준다.
이를 이용하여 java로 풀었다.
import java.util.*;
public class main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>(); //java.util.Stack으로 제공받는 Stack 라이브러리
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String order;
int data = 0;
int buffer;
boolean buffer2;
for(int i = 0; i < num; i++) {
order = sc.next(); //한 단어만 받도록 설정!
switch(order) {
case "push":
data = sc.nextInt();
stack.push(data);
continue;
case "pop":
try {
buffer = stack.pop();
}catch(EmptyStackException e){
buffer = -1;
}
System.out.println(buffer);
continue;
case "size":
System.out.println(stack.size());
continue;
case "empty":
buffer2 = stack.empty();
if(buffer2 == false) buffer = 0; else buffer = 1;
System.out.println(buffer);
continue;
case "top":
try {
buffer = stack.peek();
}catch(EmptyStackException e){
buffer = -1;
}
System.out.println(buffer);
continue;
}
}
}
}
추가
pop이나 peek의 경우 스택이 비어있을 때 호출할 경우 에러가 발생하기 때문에 try-catch를 사용했다.
push의 경우 push문자열을 받은 후 숫자를 한 번 더 받으므로 next()함수와 nextInt()를 사용했다.(nextLine은 엔터가 나올때까지 받으므로 X)
스택 라이브러리를 활용하지않고 스택을 구현하기 위해서는 배열이나 연결리스트를 사용하면 된다. 배열의 경우 스택의 크기가 고정되는 단점이 있어 isFull등의 함수가 필요할 수 있다.
반응형
'CSE > baekjoon & swexpert' 카테고리의 다른 글
baekjoon 6504번 계산 구현문제 ] 문자열, 진법 (0) | 2019.02.21 |
---|---|
baekjoon 2902번 문자열처리 ] 아스키코드 (0) | 2019.02.21 |
baekjoon 11365번 문자열처리 ] 문자열비교 및 reverse함수사용 (0) | 2019.02.21 |
백준 16435번 스네이크버드문제 ] int배열 정렬 (0) | 2019.02.18 |
beakjoon 2675번 문자열반복 ] 문자열 입력/ 합치기/ 출력 (0) | 2019.02.18 |