말랑한 하루
[SW Expert Academy] 1224 계산기 3 [Java] 본문
반응형
[ 핵심풀이 ]
후위표기식을 사용한 문제이다
그대로 구현한다면 어렵지않다.
아직 아래코드는 완벽한 구현점이아니므로, 위 링크를 참고하기바란다.
[ Java ]
import java.util.Iterator;
import java.util.Scanner;
import java.util.Stack;
public class _1224_계산기3 {
static int len;
static String input;
static void init() {
Scanner sc = new Scanner(System.in);
for (int t = 1; t <= 10; t++) {
len = sc.nextInt();
input = sc.next();
System.out.print("#" + t + " ");
solve();
}
}
static void solve() {
String output = "";
String priority = "";
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < len; i++) {
char index = input.charAt(i);
if (index == '(')
stack.push(index);
else if (index >= '0' && index <= '9')
output += index;
else if (index == '*' || index == '+') {
if (index=='+' && (stack.peek() == '*' || stack.peek()=='+'))
output += stack.pop();
if (index=='*' && stack.peek() == '*')
output += stack.pop();
stack.push(index);
}
else if (index == ')') {
while(true) {
char temp = stack.pop();
if (temp == '(') break;
output += temp;
}
}
}
while (!stack.isEmpty())
output += stack.pop();
calc(output);
}
static void calc(String input) {
Stack<Integer> stack = new Stack<Integer>();
for (int index = 0; index < input.length(); index++) {
char value = input.charAt(index);
if (value == '*')
stack.push(stack.pop() * stack.pop());
else if (value == '+')
stack.push(stack.pop() + stack.pop());
else
stack.push(Integer.parseInt(value+""));
}
System.out.println(stack.pop());
}
public static void main(String[] args) {
init();
}
}
반응형
'문제풀이 > SWexpert Academy' 카테고리의 다른 글
[SW Expert Academy] 3499 퍼펙트 셔플 [Java] (0) | 2021.02.07 |
---|---|
[SW Expert Academy] 1861 정사각형 방 [Java] (0) | 2021.02.07 |
[SW Expert Academy] 1223 계산기 2 [Java] (0) | 2021.02.07 |
[SW Expert Academy] 7793 오! 나의 여신님 [Java] (0) | 2021.02.05 |
[SW Expert Academy] 1873 상호의 배틀필드 [Java] (0) | 2021.02.05 |
Comments