๋ฐ์ํ
๋ฌธ์
https://www.acmicpc.net/problem/1918
์ฝ๋(JAVA)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
Stack<Character> operator = new Stack<>();
String formula = br.readLine();
for(int i = 0 ; i < formula.length() ; i++) {
char op = formula.charAt(i);
if('A'<=op && op<='Z') {
sb.append(op);
}
else {
if(op == '(') {
operator.push(op);
}
else if(op == ')') {
char c;
while((c = operator.pop()) != '(') sb.append(c);
}
else {
while(!operator.isEmpty() && Priority(operator.peek())>= Priority(op)) sb.append(operator.pop());
operator.push(op);
}
}
}
while(!operator.isEmpty()) sb.append(operator.pop());
System.out.println(sb.toString());
}
public static int Priority(char c) {
if(c == '*' || c=='/') return 2;
else if(c == '+' || c=='-') return 1;
else return 0;
}
}
ํ์ด
ํผ์ฐ์ฐ์: ๋ฐ๋ก ์ถ๋ ฅ
์ฐ์ฐ์: ์คํ ํ์ฉ
์ฐ์ฐ์๋ฅผ ๋ง๋๋ฉด ์ฐ์ ์คํ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค.
์ด๋, stack.peek()์ด ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ์ฐ์ ์์์ ์ฐ์ฐ์๋ผ๋ฉด ์ด๋ฅผ ๋ชจ๋ pop(์ถ๋ ฅ)ํ ํ ์์ ์ pushํ๋ค.
์ด๋ ์์ ๋ณด๋ค ๋์ ์ฐ์ ์์์ ์ฐ์ฐ์๋ ๋ง๊ทธ๋๋ก ๋จผ์ ์ฐ์ฐ์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋จผ์ ์ถ๋ ฅํ๋ค๋ ๊ฐ๋ ์ด๋ค.
๊ดํธ ์ฐ์ฐ์
"(": ์คํ์ ๋ฃ๋๋ค. ์ฐ์ฐ์ ์ฐ์ ์์์์๋ ๋งจ ์๋ ๋จ๊ณ์ ์๊ฒ ๋๋ค(๊ดํธ๋ฅผ ๊ฑฐ์ฌ๋ฌ์ ์ถ๋ ฅํ๋ฉด ์๋๊ธฐ ๋๋ฌธ!)
")": "("๋ฅผ ๋ง๋ ๋๊น์ง, ์ฐ์ฐ์๋ค์ popํ๋ค.
๋ฐ์ํ
'๐ ์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 735. Asteroid Collision (ํด์, Java ํ์ด) (0) | 2023.07.21 |
---|---|
[LeetCode] 445. add Two Numbers 2 (ํด์, Java ํ์ด) (0) | 2023.07.17 |
[SWEA] 1223๋ฒ ๊ณ์ฐ๊ธฐ2 (Java) (0) | 2021.08.20 |
[๋ฐฑ์ค]1158๋ฒ ์์ธํธ์ค๋ฌธ์ (0) | 2021.08.10 |
[๋ฐฑ์ค]1874๋ฒ ์คํ์์ด (0) | 2021.08.09 |