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 등의 메서드