스택 2

곽지욱·2024년 3월 11일

BOJ

목록 보기
49/69

28278번 : 스택2

  • 매번 느끼는건데 백준 문제는 쉬운 문제를 어렵게 설명한다..
  1. 명령을 입력할 횟수 (N)을 입력한다.

  2. N번만큼 명령을 입력할 수 있는데 명령의 개수는 1~5번까지 존재함.


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

public class Stack_2_1 {

    static LinkedList<Integer> stack = new LinkedList<>();
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));



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

        while(N --> 0){
            solution(br.readLine());
        }

        br.close();

        System.out.println(sb);


    }

    private static void solution(String query) {
        char c = query.charAt(0); //첫번째 문자는 명령어

        switch (c){
            //substring(2)를 한 이유는 공백도 문자로 포함하기 때문에 입력을 1 3 이런식으로 하기 때문에 사용자가 입력을 원하는 x번의 인덱스는 2이다.

            case '1' :stack.push(Integer.parseInt(query.substring(2))); return;
            case '2' : sb.append(stack.isEmpty()? - 1 : stack.pop()).append("\n");return;
            case '3' : sb.append(stack.size()).append("\n"); return;
            case '4' :sb.append(stack.isEmpty() ? 1 : 0).append("\n");return;
            case '5' : sb.append(stack.isEmpty() ? -1 : stack.peek()).append("\n");return; //정수가 있을때 맨위의 정수를 출력하는 것
            default: break;
        }


    }
}

알고리즘

    static LinkedList<Integer> stack = new LinkedList<>();
  • 해당 코드는 자료 구조로서의 스택을 구현하기 위해 LinkedList를 사용하는 것

  • 정수 값을 저장하는데에 사용되는 스택을 말한다

  • 자바에서 제공하는 연결 리스트를 구현한 클래스임 삽입,삭제,검색 등과 같은 연산을 할 수 있음

main 메서드

  1. BufferedReader 를 사용하여 입력을 받는다.

  2. 명령어의 수 N을 입력 받는다

  3. N번 반복하면서 명령어를 입력받고 'solution' 메서드를 호출한다.

  4. 마지막으로 StringBuilder 에 저장된 결과를 출력

solution 메서드

  1. push 메서드를 이용하여 인덱스 번호 2번에 해당하는 정수를 stack에 추가한다

  2. isEmpty 메서드를 사용하여 스택이 비어있는지 확인하고 스택이 비어있다면 -1 아니라면 pop() 을 통해 스택에서 맨 위의 정수를 빼내고 추가한다. (동시에 제거함)

  3. 스택에 들어있는 정수의 개수를 size()를 통하여 반환하고 추가

  4. 마찬가지로 스택이 비어있는지 확인하고 결과를 출력한다.

  5. 스택이 비어있는지 확인하고 맨 위의 정수를 출력한다 하지만 peek()를 이용함

peek & pop

  • peek() 는 스택의 맨 위에 있는 요소를 반환한다. 다만 스택에서 해당 요소를 제거하지 않고 맨 위의 요소를 반환하는 것

  • 스택이 비어있는 경우에는 NoSuchElementException 이 발생할 수 있음

  • pop()은 스택의 맨 위에 있는 요소를 제거하고 반환한다. 스택에서 요소를 꺼내서 제거하기 때문에 해당 요소는 스택에서 사라진다. 마찬가지로 스택이 비어있는 경우에는 NoSuchElementException 이 발생할 수 있음

  • 간단히 말하면 peek() 는 스택의 맨 위의 요소를 확인할 때 사용되고, pop() 은 스택의 맨 위의 요소를 제거하고 반환할 때 사용된다.

0개의 댓글