๋ฌธ์
SWEA(SW Expert Academy) 1223๋ฒ ๊ณ์ฐ๊ธฐ2 [D4]
ํ์ด
์คํ์ ์ด์ฉํ์ฌ ํ์ํ๊ธฐ์์ ์์ฑ/๊ณ์ฐํ๋ ๋ฌธ์
ํ์ํ๊ธฐ์ ๋ณํ
๋ง์ฝ ์ซ์์ผ ๊ฒฝ์ฐ, ๋ฐ๋ก ์ถ๋ ฅ(์ฌ๊ธฐ์๋ ํ์ํ๊ธฐ์ ๋ฌธ์์ดcarr์ ์ ์ฅ)ํ๊ณ
์ฐ์ฐ์์ผ ๊ฒฝ์ฐ, ์ฐ์ ์์์ ๋ฐ๋ผ ์คํ์ pop/push.
์คํ์์ ์์ ๋ณด๋ค ๋ฎ์ ์ฐ์ ์์ ์ฐ์ฐ์๊ฐ ๋์ฌ ๋๊น์ง ๊ณ์ popํ์ฌ ์ถ๋ ฅํ๋ค.
์ฆ, ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ์ฐ์ ์์ ์ฐ์ฐ์๋ฅผ ๋ชจ๋ pop
ํ์ฌ ๋ฌธ์ ์์๋ +, *๋ฐ์ ์์ผ๋ฏ๋ก +๋ ์คํ์ ์๋ ๋ชจ๋ ์ฐ์ฐ์๋ฅผ ์ถ๋ ฅํ๊ณ , *๋ peek()๊ฐ์ด *์ผ ๋ ์ถ๋ ฅํ๋ค.
์ฐ์ ์์์ ๋ฐ๋ฅธ ์ฐ์ฐ์ ์ถ๋ ฅ ํ, ์๊ธฐ ์์ ์ push
ํ์ํ๊ธฐ์ ๊ณ์ฐ
๋ฌธ์์ด๋ฐฐ์ด(carr)์ ์ํํ๋ฉฐ
์ซ์์ผ ๊ฒฝ์ฐ stack์(์ด์ ๊ณผ ๋ค๋ฅธ ์คํ ์ฌ์ฉ) pushํ๊ณ ์ฐ์ฐ์์ผ ๊ฒฝ์ฐ, ํ์ฌ ์คํ์์ ์ซ์ ๋๊ฐ๋ฅผ popํ์ฌ ์ฐ์ฐ.
์ฐ์ฐ ํ, ๊ฒฐ๊ณผ๋ฅผ ๋ค์ push.
๋ฌธ์์ด ๋ฐฐ์ด์ ์ํ๋ฅผ ์๋ฃํ๋ฉด, ์คํ์๋ ๊ฒฐ๊ณผ๊ฐ ๋จ ํ๋๋ง์ด ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก ์ด๋ฅผ popํ์ฌ ๊ฒฐ๊ณผ ์ถ๋ ฅ.
์ฝ๋
package stack;
import java.io.*;
import java.util.*;
public class Solution_d4_1223_๊ณ์ฐ๊ธฐ2 {
static Stack<Character> stack ;
static Stack<Integer> res ;
static int n;
static char[] carr;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
for(int T = 1 ; T<=10 ; T++) {
n = Integer.parseInt(br.readLine());
carr = new char[n];
stack = new Stack<>();
res = new Stack<>();
toPostfix(br.readLine());
sb.append("#").append(T).append(" ").append(Cal()).append("\n");
}
System.out.println(sb.toString());
}
//ํ์ํ๊ธฐ์ ๊ณ์ฐ
private static int Cal() {
for(int i =0 ; i < n ; i++) {
if(carr[i] == '+') res.push(res.pop()+res.pop());
else if(carr[i] == '*') res.push(res.pop()*res.pop());
else res.push(carr[i]-'0');
}
return res.pop();
}
//ํ์ํ๊ธฐ์์ผ๋ก ๋ณ๊ฒฝ
private static void toPostfix(String str) {
int idx =0;
for(int i =0 ; i < n ; i++) {
if(str.charAt(i)=='+' || str.charAt(i)=='*') {
while(!stack.isEmpty() && canPop(str.charAt(i))) {
carr[idx++] = stack.pop();
}
stack.push(str.charAt(i));
}
else carr[idx++] = str.charAt(i);
}
while(!stack.isEmpty()) carr[idx++] = stack.pop();
}
//์ฐ์ ์์ ํ์ธ
private static boolean canPop(char c) {
if(c == '+') return true;
if(stack.peek() == '*') return true;
else return false;
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 735. Asteroid Collision (ํด์, Java ํ์ด) (0) | 2023.07.21 |
---|---|
[LeetCode] 445. add Two Numbers 2 (ํด์, Java ํ์ด) (0) | 2023.07.17 |
[๋ฐฑ์ค]1158๋ฒ ์์ธํธ์ค๋ฌธ์ (0) | 2021.08.10 |
[๋ฐฑ์ค]1918๋ฒ ํ์ํ๊ธฐ์ (0) | 2021.08.09 |
[๋ฐฑ์ค]1874๋ฒ ์คํ์์ด (0) | 2021.08.09 |