백준 15815 java : 자료구조, stack

magicdrill·2025년 6월 24일
0

백준 문제풀이

목록 보기
624/654

백준 15815 java : 자료구조, stack

스택 자료구조

후위표기법을 구현하는 방법 중 스택을 사용하는 방법이 있다. 연산자를 만나는 순간 스택에 저장된 피연산자 두개를 꺼내서 연산 후 다시 피연산자로 스택에 저장하는 것을 반복하는 방법이다.

자바에서 스택의 메서드에는

  • push() : 추가
  • pop() : 제거 후 반환
  • peek() : 제거하지 않고 반환

등이 있다.

Character 클래스

char 타입을 객체처럼 다루기 위해 존재하는 wrapper 클래스이다.
이 문제에서는

  • Character.isDigit(char c) : 괄호 안 문자가 숫자인지 아닌지 확인
  • Character.getNumericValue(char c) : 괄호 안 문자를 정수형으로 변환
    를 사용했다.
    Character형은 문자 한 개만 저장할 수 있기 때문에 소수, 10이상의 정수, 음수 등을 저장 및 변환할 수 없다.
    만약 String 타입을 정수, 소수, 음수 등으로 변환하려면
  • Integer.parseInt(String s)
  • Double.parseDouble(String s)
    등을 사용한다.
import java.util.Scanner;
import java.util.Stack;

public class BJ15815 {
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        //후위 표기법 : 피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법
        String statement = sc.next();
        System.out.println(findAnswer(statement));

        sc.close();
    }

    public static int findAnswer(String statement){
        //후위 표기법 : 피연산자를 먼저 표시하고 연산자를 나중에 표시하는 방법
        int answer = 0;
        int i, A, B, C;
        Stack<Integer> stack = new Stack<>();

        for(i = 0; i < statement.length(); i++){
            if(statement.charAt(i) == '+'){
                B = stack.pop();
                A = stack.pop();
                C = A + B;
                System.out.println(C);
                stack.push(C);
            }
            else if(statement.charAt(i) == '-'){
                B = stack.pop();
                A = stack.pop();
                C = A - B;
                System.out.println(C);
                stack.push(C);
            }
            else if(statement.charAt(i) == '*'){
                B = stack.pop();
                A = stack.pop();
                C = A * B;
                System.out.println(C);
                stack.push(C);
            }
            else if(statement.charAt(i) == '/'){
                B = stack.pop();
                A = stack.pop();
                C = A / B;
                System.out.println(C);
                stack.push(C);
            }
            else if(Character.isDigit(statement.charAt(i))){
                stack.push(Character.getNumericValue(statement.charAt(i)));
            }
            else{
                //사실 필요 없음...
            }
        }
        answer = stack.pop();

        return answer;
    }
}

0개의 댓글