728x90
https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
import java.io.*;
import java.util.Stack;
// 후위 표기식
public class _1918 {
// 연산자의 우선순위 결정
// *, / 의 우선순위가 +, - 보다 높음 --> *, / 가 +, - 보다 먼저 출력 되어야함
public static int priority(char operator) {
if (operator == '+' || operator == '-') {
return 1;
} else if (operator == '*' || operator == '/') {
return 2;
}
return -1;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < input.length(); i++) {
char data = input.charAt(i);
// 연산자의 경우 우선순위에 따라서 처리
if (data == '+' || data == '-' || data == '*' || data == '/') {
while (!stack.isEmpty() && priority(data) <= priority(stack.peek())) {
bw.write(stack.pop());
}
stack.push(data);
} else if (data == '(') {
stack.push(data);
} else if (data == ')') {
while (!stack.isEmpty() && stack.peek() != '(') {
bw.write(stack.pop());
}
// ')' 제거
stack.pop();
}
// 피연산자의 경우
else {
bw.write(data);
}
}
while (!stack.isEmpty()) {
bw.write(stack.pop());
}
bw.flush();
bw.close();
}
}
MEMO
-- 후위 표기식의 개념을 아는 것은 기본, 연산자의 우선순위에 대해서 생각해야 하는 문제
-- *, / 가 +, - 보다 항상 먼저 나와야 함을 아는 것이 중요
!! 항상 천천히 생각하기 !!
728x90
728x90
'백준[baekjoon] > JAVA' 카테고리의 다른 글
백준(baekjoon) [JAVA] - 2609번: 최대공약수와 최소공배수 (0) | 2023.07.23 |
---|---|
백준(baekjoon) [JAVA] - 11656번: 접미사 배열 (0) | 2023.07.23 |
백준(baekjoon) [JAVA] - 1935번: 후위 표기식2 (0) | 2023.07.19 |
백준(baekjoon) [JAVA] - 17299번: 오등큰수 (0) | 2023.07.18 |
백준(baekjoon) [JAVA] - 17298번: 오큰수 (0) | 2023.07.17 |