본문 바로가기
java

[java] 백준 28278 스택2

by MiaCoder 2024. 1. 31.

 

스택을 이해하는 문제이다.

 

우선 스택의 간단한 개념에 대해서 알아야 한다.

 

스택은 선입후출의 형태를 가지고 있다. 

 

프링글스 통을 생각하면 될 것 같다. 먼저 들어간 값이  가장 나중에 나오는 것이다.

 

그렇다면 요구조건에 따라 문제를 하나씩 해결해보면 된다.

 

자바에 있는 Stack 클래스를 선언하고 사용하면 된다.

 

또한 1 3과 같은 공백을 통한 입력을 받기위해 StringTokenizer을, 

 

성능을 위해 한변에 출력하기 위한 StringBuilder을 사용했다.

 

나머지는 if문으로 간단하게 구현할 수 있었다.

 

Stack클래스의 유용한 메소드를 활용하면 편리하다.

 

조건 2의 경우

 

2 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.

로 되어있다.

 

나는 이것이 맨 위 값을 제외한 나머지 값을 출력하라는 것으로 이해했지만, 문제에서 요구사항은

맨위값을 출력하고 해당 값을 스택에서 제거하라는 의미였다.

 

햇갈리지 않도록 주의가 필요하다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        Stack<Integer> stack = new Stack<>();
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < N; i++) {
        	//N번 반복
            
            st = new StringTokenizer(br.readLine());
            String command = st.nextToken();
            //N번 입력받는 값을 변수로 선언해 if문에서 사용한다.

            if (command.equals("1")) {
                
                stack.push(Integer.parseInt(st.nextToken()));
            	//입력값이 1이라면 공백으로 이루어진 다음값을 스택에 저장한다.
                
            } else if (command.equals("2")) {
                if (!stack.isEmpty()) {
                    
                    sb.append(stack.lastElement()).append("\n");
                    stack.pop();
                
                } else {

                    sb.append("-1").append("\n");
                	// 입력값이 2라면 스택의 마지막 값을 출력하고 pop를 통해 마지막 값을 제거한다.
                }
            } else if (command.equals("3")) {
                
                sb.append(stack.size()).append("\n");
            	//입력값이 3이라면 스택의 크기를 출력한다 size사용
                
            } else if (command.equals("4")) {
                if (stack.isEmpty()) {
                    
                    sb.append("1").append("\n");
                
                } else {
                 
                    sb.append("0").append("\n");
                	// 입력값이 4라면 스택에 값이 없으면 1, 있으면 0 을 출력한다.
                }
            } else if (command.equals("5")) {
                
                if (!stack.isEmpty()) {
                    
                    sb.append(stack.peek()).append("\n");
                
                } else {

                    sb.append("-1").append("\n");
                    //입력값이 5라면 스택의 맨 위값을 출력하고 없으면 -1을 출력한다 
                
                    }
            }

        }
        System.out.print(sb);
        br.close();

    }

}

'java' 카테고리의 다른 글

[java]백준 9012 괄호  (0) 2024.01.31
[java] 백준 10773 제로  (0) 2024.01.31
[java] 백준 13909 창문 닫기  (1) 2024.01.29
[java] 17103 골드바흐 파티션  (0) 2024.01.29
[java] 백준4928 베르트랑 공준  (0) 2024.01.29