Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 후위 표기식 (gold 2 본문
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String a=br.readLine();
Stack<Character> stk=new Stack<>();
StringBuilder answer=new StringBuilder();
for(int i=0; i<a.length(); i++){
//알파벳이면 일단 올림.
char temp=a.charAt(i);
if(0<=temp-'A' && temp-'A'<=25){
answer.append(String.valueOf(temp));
}
//만약 + 혹은 -가 나온다면, 이것이 (안에 들어있지 않는 한은
//연산자를 다 뱉어야 한다. 어느 것이든지 이보다 우선순위가 앞서기 때문에
else if(temp=='+' || temp=='-'){
if(!stk.isEmpty()){
while(!stk.isEmpty() && stk.peek()!='('){
answer.append(String.valueOf(stk.pop()));
}
}
stk.push(temp);
}
//만약 * 혹은 -가 나왔다면, 전에 나온게 *,/이면 뱉는다.
//이는 (안에 있어도 동일한게, (안에서도 *,/ 전에 *,/가 등장하면
//앞서 등장한 것 이후에 현재 등장한 것이 실행되어야 하므로
//스택에 들어있는 *,/가 우선순위를 지닌다.
else if(temp=='*' || temp=='/'){
if(!stk.isEmpty() && (stk.peek()=='*' || stk.peek()=='/')){
answer.append(String.valueOf(stk.pop()));
}
stk.push(temp);
}
else{
if(temp=='('){
stk.push(temp);
}
//괄호가 )이면, (가 나올때까지 안에 있는 걸 뱉는다.
//()가 가장 젤 높은 우선순위이므로, )로 인해.
//이 안의 연산자는 다 실행되어야 하므로, 뱉는다.
else if(temp==')'){
while(true){
if(stk.peek()=='('){
break;
}
answer.append(String.valueOf(stk.pop()));
}
stk.pop();
}
}
}
//남아있는 연산자가 존재할 수 있다.
//(전에 연산자가 나오고 젤 마지막, 영어 대문자가 나오면,
//answer에 붙이기 작업만 하기 때문에 바로 전의 연산자도 뱉지못한 상태)
while(!stk.isEmpty()){
answer.append(String.valueOf(stk.pop()));
}
System.out.println(answer.toString());
}
}
'백준공부 > java' 카테고리의 다른 글
[백준] 1781번 컵라면 (gold 2 (0) | 2024.05.18 |
---|---|
[백준] 12100번 2048 (Easy (gold 2 (0) | 2024.05.17 |
[백준] 1939번 중량제한 (gold 3 (0) | 2024.05.16 |
[백준] 2091번 동전 (gold 3 (0) | 2024.05.15 |
[백준] 1613번 역사 (gold 3 (0) | 2024.05.15 |