Coding Test/자료구조

[BAEKJOON / Java] Silver 스택 2

annovation 2025. 5. 1. 22:12

Question

https://www.acmicpc.net/problem/28278


Code

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        StringBuilder str = new StringBuilder();
        
        int N = Integer.parseInt(br.readLine());
        Stack<Integer> stack = new Stack<>();
        
        for (int n = 0; n < N; n++) {
            st = new StringTokenizer(br.readLine());
            int M = Integer.parseInt(st.nextToken());
            
            switch (M) {
                case 1:
                    stack.push(Integer.parseInt(st.nextToken()));
                    break;
                case 2:
                    if (stack.isEmpty())
                        str.append(-1).append("\n");
                    else
                        str.append(stack.pop()).append("\n");
                    break;
                case 3:
                    str.append(stack.size()).append("\n");
                    break;
                case 4:
                    if (stack.isEmpty())
                        str.append(1).append("\n");
                    else
                        str.append(0).append("\n");
                    break;
                case 5:
                    if (stack.isEmpty())
                        str.append(-1).append("\n");
                    else
                        str.append(stack.peek()).append("\n");
                    break;
            }
        }
        System.out.print(str);
        br.close();
    }
}
  • BufferedReader()
    • 문자열을 한 줄 단위로 읽을 수 있도록 도와주는 클래스
    • 입력 성능이 뛰어남 (Scanner보다 빠름) 
  • br.readLine()
    • 입력을 한 줄(String)로 읽어옴
    • ex. "1 42"  "1 42"라는 문자열로 반환
  • br.close()
    • 입력 스트림을 닫아 메모리 누수 방지
    • 보통 사용이 끝난 뒤 close() 해주는 것이 좋음
  • InputSteamReader()
    • System.in처럼 바이트 기반 입력 문자 기반으로 변환해줌
    • System.in → 바이트 입력
    • InputStreamReader → 바이트를 문자로 변환
    • BufferedReader → 문자 입력을 한 줄씩 효율적으로 읽기
  • StringTokenizer()
    • 공백이나 구분자를 기준으로 문자열을 분할해서 토큰 단위로 처리할 수 있음
  • st.nextToken()
    • 다음 토큰을 반환함
    • 다음 값이 없는데 호출하면 NoSuchElementException 발생

정리

항목 설명 사용 예시 공식 문서 링크
BufferedReader 문자 입력을 버퍼링해서 효율적으로 읽음 (한 줄씩 가능) new BufferedReader(...) BufferedReader
br.readLine() 입력에서 한 줄 전체를 읽어 String으로 반환 String line = br.readLine(); readLine()
br.close() BufferedReader를 닫아 리소스를 해제함 br.close(); close()
InputStreamReader 바이트 스트림을 문자 스트림으로 변환 new InputStreamReader(System.in) InputStreamReader
StringTokenizer 문자열을 **토큰(단어)**으로 분리할 때 사용 new StringTokenizer("1 42") StringTokenizer
st.nextToken() 다음 토큰을 반환 String cmd = st.nextToken(); nextToken()

출처

https://han-hoon.tistory.com/entry/BOJJAVA-백준-28278-스택-2-자바#google_vignette

 

[BOJ/JAVA] 백준 28278 : 스택 2 (자바)

문제 정보 문제명 - 스택 2 난이도 - 실버 IV 문제 번호 - 28278번 문제 링크 https://www.acmicpc.net/problem/28278 28278번: 스택 2 첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명

han-hoon.tistory.com

 

반응형