Categories: 백준

백준 10828 스택 (자바 Java)

백준 10828 스택

문제 정보

  • 문제 출처 : 백준 Baekjoon
  • 문제 번호 : 10828
  • 문제 제목 : 스택
  • 문제 난이도 : 실버4
  • 풀이 언어 : Java

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 문제

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

접근

Scanner와 System.out.println은 시간 초과가 뜨기 때문에 BufferedReader와 BufferedWrite를 사용해 문제를 풀었다.

풀이

  • BufferedReader 를 사용하여 입력을 받는다.
  • BufferedWriter 를 사용하여 결과를 출력한다.
  • 명령어의 총 수를 입력 받아 정수로 변환한다.
  • 정수를 저장할 수 있는 스택을 초기화한다.
  • 입력 받은 명령어 수만큼 반복하여 각 명령어를 처리한다.
  • 입력된 명령어를 공백으로 구분하여 배열로 변환한 후, 해당 명령어에 맞는 작업을 수행한다.
    • push 명령어 처리: 스택에 새로운 요소를 추가한다.
    • pop 명령어 처리: 스택에서 가장 위에 있는 요소를 제거하고 그 값을 출력한다.
    • size 명령어 처리: 스택에 저장된 요소의 수를 출력한다.
    • empty 명령어 처리: 스택이 비어있는지 확인하고 그 결과를 출력한다.
    • top 명령어 처리: 스택의 가장 위에 있는 요소를 출력한다.

후기

스택을 활용한 기본적인 문제이다. 스택과 관련된 명령어들을 잘 숙지해야겠다.

코드

Java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Main {
 public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        Stack<Integer> stack = new Stack<>();

        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");

            switch (input[0]) {
                case "push":
                    stack.push(Integer.parseInt(input[1]));
                    break;
                case "pop":
                    if (!stack.isEmpty()) {
                        bw.write(stack.pop() + "\n");
                    } else {
                        bw.write(-1 + "\n");
                    }
                    break;
                case "size":
                    bw.write(stack.size() + "\n");
                    break;
                case "empty":
                    bw.write((stack.isEmpty() ? 1 : 0) + "\n");
                    break;
                case "top":
                    bw.write((stack.isEmpty() ? -1 : stack.peek()) + "\n");
                    break;
            }
        }
        
        br.close();
        bw.flush();
        bw.close();
 }
}
Java
suover

Recent Posts

Java 자바 중첩 클래스(Nested Class)란?

중첩클래스란? 자바에서 중첩 클래스(Nested Class)는 자바 프로그래밍의 중요한 개념 중 하나로, 클래스 안에 다른 클래스를…

2개월 ago

Java 자바 Enum 열거형 사용법

Enum이란? Enum은 "enumeration"의 줄임말로, 특정 값들의 집합을 정의할 수 있는 특별한 클래스입니다. 예를 들어, 요일,…

2개월 ago

Java 자바 래퍼 클래스(Wrapper Class)란? 래퍼 클래스의 필요성

래퍼 클래스(Wrapper Class)란? 자바에서 래퍼 클래스는 기본 데이터 타입(Primitive Data Type)을 객체(Object)로 감싸는 클래스입니다. 자바의…

2개월 ago

Java 자바 StringBuilder 개념 및 특징 주요 메소드

서론 Java에서 문자열을 다룰 때, 문자열의 변경이 빈번하게 발생하는 경우라면 StringBuilder 클래스를 사용하는 것이 매우…

2개월 ago

웹 개발 FitOn 팀 프로젝트 회고

서론 현대인들은 점점 더 운동과 건강에 대한 관심을 가지고 있으며, 이를 체계적으로 관리하고 공유할 수…

3개월 ago

Java 자바 String 클래스 특징 및 메소드

String 클래스란? 자바에서 String 클래스는 가장 널리 사용되는 클래스 중 하나입니다. 문자열 시퀀스를 나타내며, 문자열을…

3개월 ago