문제. 후위표기식이 주어지면 계산하고 결과를 출력하시오.
입력예시
352+*9-
답 : 12
나의 답변
public class Main {
public int solution(String str) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for( char x : str.toCharArray()) {
if(Character.isDigit(x)) {
stack.push(Character.getNumericValue(x));
}else {
int b = stack.pop();
int a = stack.pop();
switch(x) {
case '+':
stack.push(a+b);
break;
case '-':
stack.push(a-b);
break;
case '*':
stack.push(a*b);
break;
case '/':
stack.push(a/b);
break;
}
}
}
answer = stack.pop();
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String s = sc.next();
System.out.print(T.solution(s));
}
}
다른 방법
- Character.getNumericValue(x) 대신 아스키코드를 사용하여 x-48
- switch-case 문 대신 if문 사용
중위표기식은 우리가 계산 시 일반적으로 사용하는 수식표기법이며 사람이 이해하기 쉽다.
후위표기식은 연산자가 뒤에 위치하며 컴퓨터가 이해하기 쉽다.
후위표기식 사용하는 이유
- 괄호를 쓰지 않고 계산하는 내용을 나타낼 수 있다.
- 괄호를 쓰지 않아 수식을 끝까지 읽지않고 바로바로 읽으면서 계산이 가능하다.
- 후위표기식 자체에 연산자의 우선순위가 표기되어 따로 생각할 필요가 없다.
'코딩테스트 및 알고리즘' 카테고리의 다른 글
공주 구하기 (0) | 2024.01.20 |
---|---|
쇠막대기와 레이저 (0) | 2024.01.18 |
Stack (0) | 2024.01.14 |
소괄호 사이에 문자 제거 후 남은 문자 구하기 (0) | 2024.01.11 |
올바른 괄호 (0) | 2024.01.10 |