All :L

[BOJ/Java] 스택 (10828) 본문

CODING/BOJ

[BOJ/Java] 스택 (10828)

ofijwe 2024. 8. 26. 12:32
반응형

스택 (10828)

1. 문제 분석

문제 개요

  • 스택 자료구조를 사용하여 여러 가지 명령어를 처리하는 문제이다. 명령어는 push, pop, top, size, empty가 있다.
  • 각 명령어에 대한 처리를 구현해야 한다.

입력 형식

  • 첫 줄에 명령어의 수 n이 주어진다.
  • 다음 n개의 줄에는 명령어와 해당 값이 공백으로 구분되어 주어진다.

출력 형식

  • 각 명령어에 대한 결과를 출력한다.

2. 알고리즘 종류

이 문제는 스택을 이용한 시뮬레이션 문제이다. 주어진 명령어를 스택을 통해 처리하고, 각 명령어의 결과를 출력해야 한다.

3. 주요 부분 및 코드 작성 방법

1. 스택 생성 및 명령어 처리

  • 스택 자료구조를 사용하여 각 명령어에 따라 적절한 연산을 수행한다.
  • 명령어에 따라 push, pop, top, size, empty의 동작을 구현한다.

2. 명령어에 따른 동작

  • push: 스택에 값을 추가한다.
  • pop: 스택에서 값을 제거하고 출력한다. 스택이 비어있다면 -1을 출력한다.
  • top: 스택의 최상단 값을 출력한다. 스택이 비어있다면 -1을 출력한다.
  • size: 스택의 현재 크기를 출력한다.
  • empty: 스택이 비어있으면 1, 그렇지 않으면 0을 출력한다.

4. 코드 설명

메인 함수 (main)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력을 받기 위한 BufferedReader 객체 생성
        int n = Integer.parseInt(br.readLine()); // 명령어의 수를 입력받아 정수형으로 변환

        Stack<String> stack = new Stack<>(); // 문자열을 저장할 스택 생성

        for (int i = 0; i < n; i++) { // 명령어의 수만큼 반복
            String[] command = br.readLine().split(" "); // 명령어와 값을 공백으로 분리하여 배열에 저장

            switch (command[0]) { // 명령어 종류에 따라 처리
                case "push": // push 명령어일 경우
                    stack.push(command[1]); // 스택에 값을 추가
                    break;

                case "pop": // pop 명령어일 경우
                    if (stack.isEmpty()) { // 스택이 비어있는지 확인
                        System.out.println(-1); // 비어있다면 -1 출력
                    } else {
                        System.out.println(stack.pop()); // 스택의 최상단 값 제거 후 출력
                    }
                    break;

                case "top": // top 명령어일 경우
                    if (stack.isEmpty()) { // 스택이 비어있는지 확인
                        System.out.println(-1); // 비어있다면 -1 출력
                    } else {
                        System.out.println(stack.peek()); // 스택의 최상단 값 출력
                    }
                    break;

                case "size": // size 명령어일 경우
                    System.out.println(stack.size()); // 스택의 크기 출력
                    break;

                case "empty": // empty 명령어일 경우
                    System.out.println(stack.isEmpty() ? 1 : 0); // 스택이 비어있다면 1, 그렇지 않다면 0 출력
                    break;
            }
        }
    }
}

5. 전체 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력을 받기 위한 BufferedReader 객체 생성
        int n = Integer.parseInt(br.readLine()); // 명령어의 수를 입력받아 정수형으로 변환

        Stack<String> stack = new Stack<>(); // 문자열을 저장할 스택 생성

        for (int i = 0; i < n; i++) { // 명령어의 수만큼 반복
            String[] command = br.readLine().split(" "); // 명령어와 값을 공백으로 분리하여 배열에 저장

            switch (command[0]) { // 명령어 종류에 따라 처리
                case "push": // push 명령어일 경우
                    stack.push(command[1]); // 스택에 값을 추가
                    break;

                case "pop": // pop 명령어일 경우
                    if (stack.isEmpty()) { // 스택이 비어있는지 확인
                        System.out.println(-1); // 비어있다면 -1 출력
                    } else {
                        System.out.println(stack.pop()); // 스택의 최상단 값 제거 후 출력
                    }
                    break;

                case "top": // top 명령어일 경우
                    if (stack.isEmpty()) { // 스택이 비어있는지 확인
                        System.out.println(-1); // 비어있다면 -1 출력
                    } else {
                        System.out.println(stack.peek()); // 스택의 최상단 값 출력
                    }
                    break;

                case "size": // size 명령어일 경우
                    System.out.println(stack.size()); // 스택의 크기 출력
                    break;

                case "empty": // empty 명령어일 경우
                    System.out.println(stack.isEmpty() ? 1 : 0); // 스택이 비어있다면 1, 그렇지 않다면 0 출력
                    break;
            }
        }
    }
}
반응형

'CODING > BOJ' 카테고리의 다른 글

[BOJ/Java] 괄호의 값 (2504)  (0) 2024.08.26
[BOJ/Java] 괄호 (9012)  (0) 2024.08.26
[BOJ/Java] 알파벳 (1987)  (0) 2024.08.26
[BOJ/Java] 적록색약 (10026)  (0) 2024.08.25
[BOJ/Java] 도키도키 간식드리미 (12789)  (0) 2024.08.25
Comments