본문 바로가기

백준

[백준] 스택 2 28278번

728x90

코드 힌트

  1. 입력 및 출력 처리:
    • BufferedReader를 사용하여 입력을 효율적으로 받고, BufferedWriter를 사용하여 출력 속도를 높입니다.
  2. 스택 연산 처리:
    • Push (1): 입력된 정수를 스택에 추가합니다.
    • Pop (2): 스택에서 가장 위의 정수를 제거하고 출력합니다. 스택이 비어있으면 -1을 출력합니다.
    • Size (3): 스택의 현재 크기를 출력합니다.
    • IsEmpty (4): 스택이 비어있으면 1, 그렇지 않으면 0을 출력합니다.
    • Peek (5): 스택의 가장 상단에 있는 정수를 출력합니다. 스택이 비어있으면 -1을 출력합니다.
  3. 입력 분리 및 처리:
    • String.split(" ") 메서드를 사용하여 공백을 기준으로 입력 문자열을 나누고, 명령어와 관련 값을 처리합니다.

 


정답은 더보기 클릭

더보기
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // 입력을 효율적으로 받기 위해 BufferedReader 사용
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 출력을 효율적으로 하기 위해 BufferedWriter 사용
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        // Stack 객체를 생성합니다.
        Stack<Integer> stack = new Stack<>();
        
        // 첫 번째 줄에서 스택 연산의 개수를 입력받습니다.
        int n = Integer.parseInt(br.readLine());
        
        // 각 연산을 처리하기 위한 반복문
        for (int i = 0; i < n; i++) {
            // 입력된 문자열을 공백을 기준으로 나누어 배열로 변환합니다.
            String[] input = br.readLine().split(" ");
            
            // 첫 번째 값으로 어떤 연산을 수행할지 결정합니다.
            switch (Integer.parseInt(input[0])) {
                // 스택에 정수를 추가합니다.
                case 1:
                    stack.push(Integer.parseInt(input[1]));
                    break;
                // 스택에서 정수를 제거하고 출력합니다. 스택이 비어있으면 -1을 출력합니다.
                case 2:
                    if (stack.isEmpty()) {
                        bw.write("-1\n");
                    } else {
                        bw.write(stack.pop() + "\n");
                    }
                    break;
                // 스택의 현재 크기를 출력합니다.
                case 3:
                    bw.write(stack.size() + "\n");
                    break;
                // 스택이 비어있는지 여부를 출력합니다. 비어있으면 1, 아니면 0을 출력합니다.
                case 4:
                    if (stack.isEmpty()) {
                        bw.write("1\n");
                    } else {
                        bw.write("0\n");
                    }
                    break;
                // 스택의 가장 상단에 있는 정수를 출력합니다. 스택이 비어있으면 -1을 출력합니다.
                case 5:
                    if (stack.isEmpty()) {
                        bw.write("-1\n");
                    } else {
                        bw.write(stack.peek() + "\n");
                    }
                    break;
            }
        }
        
        // 출력 버퍼를 비우고 닫습니다.
        bw.flush();
        bw.close();
    }
}
728x90

'백준' 카테고리의 다른 글

[백준] 괄호 9012번  (0) 2024.08.08
[백준] 제로 10773번  (0) 2024.08.08
[백준] 그림 1926번  (0) 2024.07.31
[백준] 수 찾기 1920번  (0) 2024.07.30
[백준] 최대공약수 1850번  (0) 2024.07.28