본문 바로가기
Algorithm/백준

[백준] 스택(10828)

by 세류오 2023. 3. 8.

 

📦 문제

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net


stack을 이해한 이후 활용해보고 싶은마음에 풀은 문제

 

push,pop을 입력받는 곳을 if처리 하려다 그러면 입력때마다
if~elseif를 타고 내려가야 하는게 비효율적이라고 생각되어서 switch로 작성

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

public class les10828 {
  /*
   * 제목: 스택
   * - 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오
   * 
   * Stack구현
   * - Stack을 담을 배열
   * - top: stack의 포인터
   * - Stack생성자
   *  - 생성 시 입력받은 숫자만큼 배열 생성
   *  - 포인터를 -1로 생성 => -1(=없다, 배열은 0부터 시작)
   */
  private static int top = -1;
  private static int[] stack;

  public static void main(String[] args) throws IOException {
    //속도 -> BufferedReader
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    StringTokenizer st;

    //입력 갯수 받기
    int num = Integer.parseInt(br.readLine());
    stack = new int[num];

    for(int i = 0; i < num; i++){
      //한줄읽고 " ", 공백으로 나누어서 토크나이저가 순서대로 출력
      st = new StringTokenizer(br.readLine(), " ");
      switch (st.nextToken()) {
        case "push":
          push(Integer.parseInt(st.nextToken()));
          break;
        case "pop": 
          pop();
          break;
        case "size":
          size();
          break;
        case "top":
          top();
          break;
        case "empty":
          empty();
          break;
      }
    }
    br.close();//br닫아주기
  }
  //top을 ++이후 배열에 값을 넣어주기
  public static void push(int num){
    top++;
    stack[top] = num;
  }
  //pop: top위치를 출력 후, top을 한칸 후진
  public static void pop(){
    if(top == -1) System.out.println("-1");
    else {
      System.out.println(stack[top]);
      top--;
    }
  }
  //stack이 가지고있는 정수의 개수
  public static void size(){
    System.out.println(top+1);
  }
  //stack에서 top이 가르키는 위치를 출력
  public static void top(){
    if(top == -1) System.out.println("-1");
    else System.out.println(stack[top]);
  }
  //비어있는지 검즘 => top == -1 => 비어있다
  public static void empty(){
    if(top == -1) System.out.println("1");
    else System.out.println("0");
  }
}

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

[백준] 11654번 아스키 코드  (0) 2022.07.22
[백준] 1712번 손익분기점  (0) 2022.07.22
백준 문제풀이 Github-TIL  (0) 2021.09.25
3052번: 나머지  (0) 2021.09.16
2742: 기찍 N  (0) 2021.09.16