스택을 이해하는 문제이다.
우선 스택의 간단한 개념에 대해서 알아야 한다.
스택은 선입후출의 형태를 가지고 있다.
프링글스 통을 생각하면 될 것 같다. 먼저 들어간 값이 가장 나중에 나오는 것이다.
그렇다면 요구조건에 따라 문제를 하나씩 해결해보면 된다.
자바에 있는 Stack 클래스를 선언하고 사용하면 된다.
또한 1 3과 같은 공백을 통한 입력을 받기위해 StringTokenizer을,
성능을 위해 한변에 출력하기 위한 StringBuilder을 사용했다.
나머지는 if문으로 간단하게 구현할 수 있었다.
Stack클래스의 유용한 메소드를 활용하면 편리하다.
조건 2의 경우
2 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
로 되어있다.
나는 이것이 맨 위 값을 제외한 나머지 값을 출력하라는 것으로 이해했지만, 문제에서 요구사항은
맨위값을 출력하고 해당 값을 스택에서 제거하라는 의미였다.
햇갈리지 않도록 주의가 필요하다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
//N번 반복
st = new StringTokenizer(br.readLine());
String command = st.nextToken();
//N번 입력받는 값을 변수로 선언해 if문에서 사용한다.
if (command.equals("1")) {
stack.push(Integer.parseInt(st.nextToken()));
//입력값이 1이라면 공백으로 이루어진 다음값을 스택에 저장한다.
} else if (command.equals("2")) {
if (!stack.isEmpty()) {
sb.append(stack.lastElement()).append("\n");
stack.pop();
} else {
sb.append("-1").append("\n");
// 입력값이 2라면 스택의 마지막 값을 출력하고 pop를 통해 마지막 값을 제거한다.
}
} else if (command.equals("3")) {
sb.append(stack.size()).append("\n");
//입력값이 3이라면 스택의 크기를 출력한다 size사용
} else if (command.equals("4")) {
if (stack.isEmpty()) {
sb.append("1").append("\n");
} else {
sb.append("0").append("\n");
// 입력값이 4라면 스택에 값이 없으면 1, 있으면 0 을 출력한다.
}
} else if (command.equals("5")) {
if (!stack.isEmpty()) {
sb.append(stack.peek()).append("\n");
} else {
sb.append("-1").append("\n");
//입력값이 5라면 스택의 맨 위값을 출력하고 없으면 -1을 출력한다
}
}
}
System.out.print(sb);
br.close();
}
}
'java' 카테고리의 다른 글
[java]백준 9012 괄호 (0) | 2024.01.31 |
---|---|
[java] 백준 10773 제로 (0) | 2024.01.31 |
[java] 백준 13909 창문 닫기 (1) | 2024.01.29 |
[java] 17103 골드바흐 파티션 (0) | 2024.01.29 |
[java] 백준4928 베르트랑 공준 (0) | 2024.01.29 |