반응형
머릿속으로 스택을 사용해서 푸는과정이 아직 구체적으로 그려지지 않는것 같습니다.
연습이 더 필요할 것 같네요.
import java.io.*;
import java.util.*;
public class Main {
static int priority(char ch) {
switch (ch) {
case '(':
return 0;
case '+':
case '-':
return 1;
default:
return 2;
}
}
public static void main(String[] args) throws IOException {
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char expr[] = br.readLine().toCharArray();
for (char ch : expr) {
if ('A' <= ch && ch <= 'Z') // 문자일 경우는 바로 출력
sb.append(ch);
else if (ch == '(') // 괄호가 열리면 스택에 추가
stack.push(ch);
else if (ch == ')') // 괄호가 닫히면
while (!stack.isEmpty()) {
char op = stack.pop();
if (op == '(') break; // 닫힘 괄호를 만날때까지 반복
sb.append(op); // 연산자 출력
}
else { // 연산자면 스택에 있는 연산자 우선순위 비교 괄호일 경우는 멈추기
while (!stack.isEmpty() && priority(stack.peek()) >= priority(ch))
sb.append(stack.pop()); // 스택에 있는게 우선 순위가 높거나 같으면 pop출력
stack.push(ch);
}
}
while (!stack.isEmpty())
sb.append(stack.pop());
System.out.print(sb);
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 2743번 단어 길이 재기 [ Java ] (0) | 2021.03.29 |
---|---|
백준 10820번 문자열 분석 [ Java ] (0) | 2021.03.29 |
백준 1935번 후위 표기식2 [ Java ] (0) | 2021.03.28 |
백준 17299번 오등큰수 [ Java ] (0) | 2021.03.28 |
백준 17298번 오큰수 [ Java ] (0) | 2021.03.28 |