1223 계산기 2
2020. 1. 30. 17:28ㆍLearn/Algorithm
후위연산식으로 바꾸고
다시 후위연산식을 계산하는 계산기를 만드는 문제.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import java.util.Scanner; import java.util.Stack; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); for(int t = 0; t < 10; t++) { Stack st = new Stack(); Stack st2 = new Stack(); String result = ""; int awwer = sc.nextInt(); sc.nextLine(); String[] str = sc.nextLine().split(""); char[] stack = new char[20]; int top = -1; for (int i = 0; i < str.length; i++) { char c = str[i].charAt(0); switch(c) { // int형 범위 이하의 정수 or String 문자열 case '(' : // 스택에 무조건 넣는다 stack[++top] = c; break; case '*': // 스택에 2보다 작은 우선순위가 있을 때까지 꺼내서 출력 case '/': while(top >= 0 && (stack[top] == '*'|| stack[top] == '/')) { result += stack[top--]; } stack[++top] = c; break; case '+': // 스택에 1보다 작은 우선순위가 있을 때까지 꺼내서 출력 case '-': while(top >= 0 && (stack[top] == '+' || stack[top] == '-' || stack[top] == '*'|| stack[top] == '/')) { result += stack[top--]; } stack[++top] = c; break; case ')': // ( 여는 괄호가 나올 때까지 모두 빼서 출력 while(top >= 0 && stack[top] != '(') { result += stack[top--]; } if(top >= 0 && stack[top] == '(') { // ( 괄호가 반드시 있겠지만, 확인해줌 top--; } break; default : // 피연산자 (숫자) result+= str[i]; break; } } while(top > -1) { // 스택에 남아있는 연산자를 출력 result += stack[top--]; } StringBuilder sbb = new StringBuilder(result); for(int i = 0; i < sbb.length(); i++) { if( '0' <= sbb.charAt(i) && sbb.charAt(i) <= '9') st.push(sbb.charAt(i)); else if(sbb.charAt(i) == '+' || sbb.charAt(i) == '-') { int b = Integer.parseInt(st.peek().toString()); st.pop(); int a = Integer.parseInt(st.peek().toString()); st.pop(); if(sbb.charAt(i) == '+') st.push(a+b); if(sbb.charAt(i) == '-') st.push(a-b); } else if(sbb.charAt(i) == '*' || sbb.charAt(i) == '/') { int b = Integer.parseInt(st.peek().toString()); st.pop(); int a = Integer.parseInt(st.peek().toString()); st.pop(); if(sbb.charAt(i) == '*') st.push(a*b); if(sbb.charAt(i) == '/') st.push(a/b); } } System.out.println("#" + (t+1) + " " + st.peek()); } } } | cs |
'Learn > Algorithm' 카테고리의 다른 글
552 : 반복제어문3 - 자가진단5 (0) | 2020.01.31 |
---|---|
1209. [S/W 문제해결 기본] 2일차 - Sum (0) | 2020.01.31 |
1175 주사위던지기2 (0) | 2020.01.30 |
1169 주사위던지기1 (0) | 2020.01.30 |
2007. 패턴 마디의 길이 (0) | 2020.01.29 |