티스토리 뷰

백준/java

[백준 28278 / JAVA] 스택2

3284921 2024. 11. 20. 00:52

[단계별로 풀어보기] 백준 28278 / 스택2

 

문제:

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  1. 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
  2. 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
  3. 3: 스택에 들어있는 정수의 개수를 출력한다.
  4. 4: 스택이 비어있으면 1, 아니면 0을 출력한다.
  5. 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다

풀이:

스택의 기본 함수를 이용하면 되는 간단한 문제..일 줄 알았으나 예상치 못하게 시간 초과 오류가 발생했다.

지피티에게 물어보니 Scanner를 사용한 게 원인이 될 수 있다는 답변을 받았다. 

안 그래도 이 문제를 풀기 전에 Scanner와 BufferedReader의 차이에 대해 알아봤는데... BufferedReader의 장점에 <속도가 빠르다>가 있었다. 그러나 Scanner보다 방식이 복잡해서 외면하고 있었는데... 이제부터 Scanner 집어치우고 BufferedReader 써야겠다...

 

Stack은

Stack<자료형> 변수명 = new Stack()<>;

과 같은 형태로 사용한다.

Stack을 다룰 때 주로 사용하는 함수는

 

.push(a) a를 스택의 최상단에 집어넣는다

.pop() 최상단에 있는 값을 pop한다(끄집어낸다. 값을 얻고 스택에서 삭제함)

.peak() 최상단에 있는 값을 삭제하지 않고 슬쩍 들여다보기만 한다

.isEmpty() 스택이 비어 있으면 true

.size() 스택의 크기를 출력한다

 

 

코드:

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

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

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

        int N = Integer.parseInt(br.readLine());

        Stack<Integer> stack = new Stack<>();

        for (int i = 1; i <= N; i++){
            st = new StringTokenizer(br.readLine());
            int X = Integer.parseInt(st.nextToken());

            switch (X){

                case 1:
                    int a = Integer.parseInt(st.nextToken());
                    stack.push(a);
                    break;

                case 2:
                    if (!stack.isEmpty()){
                        System.out.println(stack.pop());
                    }
                    else {
                        System.out.println(-1);
                    }
                    break;

                case 3:
                    System.out.println(stack.size());
                    break;

                case 4:
                    if (stack.isEmpty()){
                        System.out.println(1);
                    }
                    else {
                        System.out.println(0);
                    }
                    break;

                case 5:
                    if (stack.isEmpty()){
                        System.out.println(-1);
                    }
                    else {
                        System.out.println(stack.peek());
                    }

            }
        }
    }
}

 

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

[SWEA 1859 / JAVA] 백만 장자 프로젝트  (0) 2024.11.19
[백준 2563 / JAVA] 색종이  (2) 2024.11.15
[백준 2566 / JAVA] 최댓값  (0) 2024.11.14
[백준 2738 / JAVA] 행렬 덧셈  (0) 2024.11.14
[백준 9086 / JAVA] 문자열  (1) 2024.11.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함