
접근법
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
위의 명령을 처리하는 프로그램
스택의 선언은 다음과 같다.
Stack<Integer> stack = new Stack<>();
push
는 stack.push(숫자)
pop
은 요소를 제거한 뒤 제거된 수를 반환함. stack.pop()
size
는 stack.size
empty
는 stack.isEmpty()
이는 boolean 타입으로 리턴된다.
top
의 경우 stack.peek()
이다. 기본적으로 제공되는 메서드를 활용할 수 있으며 시간 초과 방지를 위해
buffer
를 사용하여 작성하며 각 케이스는 swich
로 해결한다.풀이
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(reader.readLine()); // 명령의 수
Stack<Integer> stack = new Stack<>();
for(int i=0; i<N; i++) {
String input = reader.readLine();
String[] stackList = input.split(" ");
String name = stackList[0];
// 입력된 명령어에 따른 case 처리
switch (name) {
case "push": {
Integer num= Integer.parseInt(stackList[1]);
stack.push(num);
break;
}
case "pop":{
if(stack.isEmpty()) {
writer.write(String.valueOf(-1)+ "\\n");
}else {
writer.write(String.valueOf(stack.pop()) + "\\n");
}
break;
}
case "size" : {
writer.write(String.valueOf(stack.size()) + "\\n");
break;
}
case "empty" : {
if(stack.isEmpty()) {
writer.write(String.valueOf(1) + "\\n");
}else {
writer.write(String.valueOf(0) + "\\n");
}
break;
}
case "top" : {
if(stack.isEmpty()) {
writer.write(String.valueOf(-1) + "\\n");
}else {
writer.write(String.valueOf(stack.peek()) + "\\n");
}
break;
}
}
}
writer.flush();
writer.close();
reader.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
Share article