๋ฌธ์
ํ์ ํ๊ธฐ์๊ณผ ๊ฐ ํผ์ฐ์ฐ์์ ๋์ํ๋ ๊ฐ๋ค์ด ์ฃผ์ด์ ธ ์์ ๋, ๊ทธ ์์ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํผ์ฐ์ฐ์์ ๊ฐ์(1 โค N โค 26) ๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋์งธ ์ค์๋ ํ์ ํ๊ธฐ์์ด ์ฃผ์ด์ง๋ค. (์ฌ๊ธฐ์ ํผ์ฐ์ฐ์๋ A~Z์ ์๋๋ฌธ์์ด๋ฉฐ, A๋ถํฐ ์์๋๋ก N๊ฐ์ ์๋๋ฌธ์๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ๊ธธ์ด๋ 100์ ๋์ง ์๋๋ค) ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ N+2๋ฒ์งธ ์ค๊น์ง๋ ๊ฐ ํผ์ฐ์ฐ์์ ๋์ํ๋ ๊ฐ์ด ์ฃผ์ด์ง๋ค. 3๋ฒ์งธ ์ค์๋ A์ ํด๋นํ๋ ๊ฐ, 4๋ฒ์งธ ์ค์๋ B์ ํด๋นํ๋๊ฐ , 5๋ฒ์งธ ์ค์๋ C ...์ด ์ฃผ์ด์ง๋ค, ๊ทธ๋ฆฌ๊ณ ํผ์ฐ์ฐ์์ ๋์ ํ๋ ๊ฐ์ 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
ํ์ ํ๊ธฐ์์ ์์์๋ถํฐ ๊ณ์ฐํ์ ๋, ์์ ๊ฒฐ๊ณผ์ ์ค๊ฐ ๊ฒฐ๊ณผ๊ฐ -20์ต๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 20์ต๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์์ซ์ ๋์งธ ์๋ฆฌ๊น์ง ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 128 MB | 22787 | 11044 | 8864 | 48.258% |
https://www.acmicpc.net/problem/1935 |
ํ์ด
ํ์ํ๊ธฐ์์ ์ฅ์
์ผ๋ฐ์ ์ผ๋ก ์ต์ํ์ง ์์์ ๊ทธ๋ ์ง, ์ค์ํ๊ธฐ์๋ณด๋ค ํ์ํ๊ธฐ์์ ๊ดํธ๋ ์ฌ์น์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ์๊ฐํ์ง ์์ ํจ์ฌ ์ง๊ด์ ์ด๋ค. ์๋ฅผ๋ค์ด, ์ค์ํ๊ธฐ์์์ ==47+2==๋ผ๋ ์ฐ์ฐ์ ์งํํ ๋, 7+2๋ฅผ ๋จผ์ ์ฐ์ฐํ๊ณ ์ถ๋ค๋ฉด, ๊ดํธ๋ฅผ ํ์ฐ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค. ==4(7+2)== ํ์ง๋ง ํ์ํ๊ธฐ์์ผ๋ก ํํํ๋ค๋ฉด ==4 7 2 + *== ๋ก ํํํ ์์๋ค.
ํ์ํ๊ธฐ์ ์ฝ๋ ๋ฒ
์ผ์ชฝ์์ ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฝ๊ธฐ ์์ํ๋ค. ํผ์ฐ์ฐ์(์ซ์)๋ ์ผ๋จ ์ง๋์น๊ณ , ์ฐ์ฐ์(+-*/)๊ฐ ๋์ค๊ฒ ๋๋ฉด, ์ฐ์ฐ์ ์์ชฝ ๋ ๊ฐ์ ์ซ์๋ก ์ฐ์ฐ์ ์งํํ๋ค.
- ์์ ) ==4 7 2 + *==
- ์ผ์ชฝ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฝ์ผ๋ฉด์ ์ฐ์ฐ์๋ฅผ ์ฐพ๋๋ค.
- +์ฐ์ฐ์๋ฅผ ์ฐพ์๋ค. +์ฐ์ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ชฝ ๋๊ฐ์ ํผ์ฐ์ฐ์ 7, 2 ๋ฅผ ๋ํ๋ค.
- ์ฐ์ฐ์ ์งํํ๊ณ ๋๋ฉด ์ฐ์ฐ๋ ๊ฐ์ ์ ์ด๋๋ค. ==4 9 *==
- ๋ค์ ์์ฐจ์ ์ผ๋ก ์ฐ์ฐ์๋ฅผ ์ฐพ๋๋ค.
- *์ฐ์ฐ์๋ฅผ ์ฐพ์๋ค. ์์ชฝ ๋๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ์ฐ์ ์งํํ๋ค.
- ์ฐ์ฐ๊ฒฐ๊ณผ๋ ==36==
์ฝ๋
public class ํ์ํ๊ธฐ์2 {
//switch๋ฌธ ํ์ฉ?
//๋ฐฐ์ด๋ก ์ซ์๋ฅผ ๋ฃ๊ณ
//์คํ์๋ ์ธ๋ฑ์ค๋ง ์ ์ฅ
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Double> stack = new Stack<>();
String str = br.readLine();
double[] arr = new double[N];
for (int i = 0; i < N; i++) {
arr[i] = Double.parseDouble(br.readLine());
}
double result = 0;
for (int i = 0; i < str.length(); i++) {
if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') {
stack.push(arr[str.charAt(i) - 'A']); // ํต์ฌ ์ฝ๋
} else {
if (!stack.isEmpty()) {
double a = stack.pop();
double b = stack.pop();
switch (str.charAt(i)) {
case '+':
result = b + a;
stack.push(result);
continue;
case '-':
result = b - a;
stack.push(result);
continue;
case '*':
result = b * a;
stack.push(result);
continue;
case '/':
result = b/ a;
stack.push(result);
continue;
}
}
}
}
System.out.printf("%.2f", stack.pop());
br.close();
}
}