Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_후위식 연산_Stack) 본문
알고리즘/인프런 - Java알고리즘 입문
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_후위식 연산_Stack)
slow-walker 2023. 9. 30. 20:24
4. 후위식 연산(postfix)
예시 입력 1
352+*9-
예시 출력 1
12
후의식이란 숫자가 앞에있고 연산자만 뒤에 빠지는 것 입니다.
중의식 : 5+3, 5-3
후의식 : 53+, 53-
후의식으로 할때 빼기를 당하는 숫자는 왼쪽에 있는 숫자입니다.
숫자면 stack에 푸시하고 연산자를 만나면 꺼냅니다. 먼저 뺀게 오른쪽, 나중에 뺀게 왼쪽,
왼쪽에서 오른쪽을 빼야 합니다.
그래서 후의식을 다 연산하고 나면 스택에 숫자 딱 하나 남아있습니다.
강의 풀이 (Time: 155ms Memory: 27MB)
import java.util.Scanner;
import java.util.Stack;
public class Main {
public int solution(String str) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (char x : str.toCharArray()) {
// x가 숫자인지 판단, 0이 아스키 넘버로 48이다. 48 = '0'
if (Character.isDigit(x)) stack.push(x - 48);
else {
int rt = stack.pop();
int lt = stack.pop();
if (x == '+') stack.push(lt + rt);
else if (x == '-') stack.push(lt - rt);
else if (x == '*') stack.push(lt * rt);
else if (x == '/') stack.push(lt / rt);
}
}
answer = stack.get(0);
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
'알고리즘 > 인프런 - Java알고리즘 입문' 카테고리의 다른 글
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_공주구하기_Queue) (1) | 2023.10.01 |
---|---|
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_쇠막대기_Stack) (1) | 2023.10.01 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_크레인 인형뽑기_Stack) (0) | 2023.09.30 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_괄호문자제거_Stack) (0) | 2023.09.30 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_올바른 괄호_Stack) (0) | 2023.09.30 |