[BOJ] 1918 ํ์ ํ๊ธฐ์
https://www.acmicpc.net/problem/1918
๋ฌธ์ ์ ๊ทผ
์
๋ ฅ๋ฐ์ String์ char ๋ฐฐ์ด๋ก ๋ณํํํ ํ๋์ฉ ์ ๊ทผํด์ ์ฐ์ฐ์๋ Stack์ ์ด์ฉํด ์ฒ๋ฆฌํ๊ณ StringBuilder์ append๋ฅผ ์ด์ฉํด์ ์ด์ด ๋ถ์ฌ์ฃผ์๋ค.
์ค์ํ๊ธฐ์์์ ํ์ํ๊ธฐ์์ผ๋ก ๋ณํํ ๋, Stack์ ์ด์ฉํ๋๋ฐ ํ์ฌ ์ฐ์ฐ์๋ณด๋ค stack์ top์ ์๋ ์ฐ์ฐ์์ ์ฐ์ ์์๊ฐ ๋๋ค๋ฉด postfix์ ์ถ๊ฐํด์ค๋ค.
'*'์ '/'๋ฅผ 2, '+' ์ '-'๋ฅผ 1, '('์ 0์ผ๋ก ์ค์ ํด์ ์์ ๋ฐฉ์์ ๊ฐ๋ฅํ๋๋ก ํ๋ค.
์
๋ ฅ์ ๋ฐ์์ 4๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์ด์ ์ฒ๋ฆฌ๋ฅผ ํ์๋ค.
1.A~Z ์ฌ์ด์ ํผ์ฐ์ฐ์์ผ ๊ฒฝ์ฐ postfix์ ์ถ๊ฐํ๋ค.
2.'('์ธ ๊ฒฝ์ฐ Stack์ pushํ๋ค.
3.')'์ธ ๊ฒฝ์ฐ Stack์์ '('๊ฐ ๋์ฌ๋๊น์ง popํด์ฃผ์ด postfix์ ์ถ๊ฐํ๋ค.
4.๋ค๋ฅธ ์ฐ์ฐ์์ผ ๊ฒฝ์ฐ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ ํ์ฌ ์ฐ์ฐ์์ ์ฐ์ ์์๊ฐ stack์ top์ ์๋ ์ฐ์ ์์๋ณด๋ค ๋์์ง ๋๊น์ง stack์ ์๋ ์ฐ์ฐ์๋ฅผ popํด์ postfix์ ์ถ๊ฐํ๊ณ , ํ์ฌ ์ฐ์ฐ์๋ฅผ ์คํ์ pushํ๋ค
Code
import java.util.Scanner;
import java.util.Stack;
public class BOJ1918 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
System.out.println(toPostfix(input));
}
public static String toPostfix(String infix){
Stack<Character> op = new Stack<>();
StringBuilder postfix = new StringBuilder();
for(char c: infix.toCharArray()){
if(c >= 'A' && c<= 'Z'){
postfix.append(c);
}
else {
// ์ฐ์ฐ์์ผ ๋
if(c=='('){
op.push(c);
}
else if(c==')'){
while (!op.isEmpty() && op.peek() != '(') {
postfix.append(op.pop());
}
if(!op.isEmpty()) op.pop();
} else {
// ์คํ์ ์ฐ์ฐ์๊ฐ ์ ์ฅ๋์ด์์๋, ํ์ฌ ์ฐ์ฐ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ ์ฐ์ ์์๊ฐ ๋์ฌ๋๊น์ง popํด์ postfix์ ์ถ๊ฐํ๋ค.
while(!op.isEmpty()&&getPrecedence(op.peek()) >= getPrecedence(c)){
postfix.append(op.pop());
}
op.push(c);
}
}
}
while(!op.isEmpty()){
postfix.append(op.pop());
}
return postfix.toString();
}
// ์ฐ์ฐ์์ ์ฐ์ ์์๋ฅผ ๋ฐํํ๋ค.
static public int getPrecedence(char op){
if(op == '*' || op == '/') return 2;
else if(op == '+' || op == '-') return 1;
else return 0;
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
์ค์ ํ๊ธฐ์์ ํ์ ํ๊ธฐ์์ผ๋ก ์ผ๋จ ์ต๋ํ ๋ง์ ์์๋ค์ ๋ณํํด์ฃผ๊ณ , ๊ท์น์ ์ฐพ๋ ๊ณผ์ ์ด ์ค๋ ๊ฑธ๋ ธ๋ค.
๋ฐ๋ก๋ค์ ์ต๋ํ ๋ง์ด ์ฐพ์๋ณด๊ณ ๋ณํํด ๋ณด๋ฉด์ ๊ณ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ์ณ๋๊ฐ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][๋ฐฑ์ค] 2263 ํธ๋ฆฌ์ ์ํ (0) | 2022.04.11 |
---|---|
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌธ์์ด ์์ถ (0) | 2022.04.10 |
[Algorithm/Java][๋ฐฑ์ค] 1865 ์ํ (0) | 2022.04.07 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (0) | 2022.04.06 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๋ค์ ํฐ ์ซ์ (0) | 2022.04.06 |