Programming/JAVA
[백준] 10828: 스택
gayeon_
2024. 1. 18. 17:14
기본적인 스택 문제이다.
입출력 예제다.
package boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
// StringBuilder를 사용하여 결과를 한 번에 출력하기 위한 객체 생성
StringBuilder sb = new StringBuilder();
// BufferedReader를 사용하여 입력을 받기 위한 객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 횟수 입력, 정수로 변환
int N = Integer.parseInt(br.readLine());
// 정수를 저장할 스택 생성
Stack<Integer> stack = new Stack<Integer>();
// 입력된 횟수만큼 반복
for (int i = 0; i < N; i++) {
// StringTokenizer를 사용하여 문자열을 공백 기준으로 나누기(공백으로 토큰을 나눔)
StringTokenizer st = new StringTokenizer(br.readLine());
// 첫 번째 토큰은 명령어
String input = st.nextToken();
// 두 번째 토큰이 존재하면 정수를 스택에 넣음
if (st.hasMoreTokens()) {
stack.push(Integer.parseInt(st.nextToken()));
} else if (input.equals("pop")) {
// 명령어가 "pop"이면 스택에서 값을 꺼내서 출력
// 스택이 비어있으면 -1 출력
if (stack.isEmpty()) {
sb.append(-1).append("\n");
} else {
sb.append(stack.pop()).append("\n");
}
} else if (input.equals("size")) {
// 명령어가 "size"이면 스택의 크기를 출력
sb.append(stack.size()).append("\n");
} else if (input.equals("empty")) {
// 명령어가 "empty"이면 스택이 비어있는지 여부를 출력
if (stack.isEmpty())
sb.append(1).append("\n");
else
sb.append(0).append("\n");
} else if (input.equals("top")) {
// 명령어가 "top"이면 스택의 가장 위에 있는 값 출력
if (stack.isEmpty())
sb.append(-1).append("\n");
else
sb.append(stack.peek()).append("\n");
}
}
// 결과 출력
System.out.println(sb);
}
}
StringBuilder로 결과를 한번에 출력하기 위한 객체를 생성하고
BufferedReader로 입력을 받기 위한 객체를 생성했다.
그후 로직에 맞게 제어문을 작성했다.
StringBuilder
- 자바에서 제공하는 가변적인 문자열을 다루기 위한 클래스
- String과 달리 내부의 문자열을 직접 수정 가능하다.
- append, insert, delete, reverse 등의 메서드로 문자열 조작 가능
- 문자열의 동적인 생성이 필요할 때 사용
BufferedReader
- 자바에서 제공하는 입력 스트림을 버퍼링하여 효율적으로 읽을 수 있는 클래스
- readLine 메서드로 한 줄씩 텍스트를 읽어올 수 있다.
- 주로 문자열 입력을 받을 때 사용
- InputStreamReader와 함께 사용해 다양한 입력 소스로부터 데이터를 읽어옴
StringTokenizer
- 주어진 문자열을 특정 구분자를 기준으로 여러 개의 토큰으로 분리할 대 사용
- nextToken, hasMoreTokens 등의 메서드