-
[백준]1918. 후위 표기식알고리즘/백준 2021. 1. 8. 23:16
[백준]1918. 후위 표기식
📄 링크
💡 문제 분석
중위 표기식을 입력으로 받아 후위 표기식으로 출력하는 문제입니다.
후위 표기식은 괄호가 필요 없기 때문에 입력으로 받아도 출력하지 않습니다.보통 이런 수식 문제들은 스택을 이용하는 경우가 많은 것 같습니다. ArrayDeque을 이용해서 풀어보았습니다.
- ‘(‘
- 열린 괄호가 나온다면 스택에 푸시합니다
- ‘)’
- 닫힌 괄호가 나온다면 열린 괄호가 나올 때까지 출력합니다.
- A ~ Z
- 그대로 출력합니다
- Operator
- 자신보다 우선순위가 낮은 연산자가 나올 때까지 스택에서 뽑아서 출력합니다
- 우선순위를 리턴하는 함수를 만들었습니다.
- 마지막엔 스택이 빌때까지 뽑아서 출력합니다.
⌨️ 코드
import java.util.ArrayDeque; import java.util.Scanner; public class Boj1918_tk { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); String s = sc.next(); ArrayDeque<Character> stk = new ArrayDeque<>(); for(int i= 0; i < s.length(); i++) { char c = s.charAt(i); if(c == '(') { stk.push(c); } else if(c == ')') { while(!stk.isEmpty() && stk.peek() != '(') { sb.append(stk.poll()); } stk.poll(); } else if(c >= 'A' && c <= 'Z') { sb.append(c); } else { int p = getPriority(c); while(!stk.isEmpty() && getPriority(stk.peek()) >= p) { sb.append(stk.poll()); } stk.push(c); } } while(!stk.isEmpty()) sb.append(stk.poll()); System.out.println(sb); } public static int getPriority(char op) { if(op == '+' || op == '-') return 1; else if(op == '*' || op == '/') return 2; else return 0; } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준]16639. 괄호 추가하기 3 (0) 2021.01.10 [백준]18500. 미네랄2 (0) 2021.01.10 [백준]1629. 곱셈 (0) 2021.01.08 [백준]1504. 특정한 최단경로 (0) 2021.01.08 [백준]11657. 타임머신 (0) 2021.01.07