๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/4466)
< A Smart Brain is a Tasty Brain >
๋ฌธ์ ํ์ด
Stack์ ์ฌ์ฉํ์ฌ ๋ซ๋ ๊ดํธ๊ฐ ๋์ฌ ๋๋ง๋ค ๊ดํธ ์์ ํํ์์ ๊ณ์ฐํ๋ค.
* ! ์ฐ์ฐ ์์๋ฅผ ์กฐ์ฌํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
public class _4466_ { // A Smart Brain is a Tasty Brain
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int x = Integer.parseInt(bf.readLine());
Stack<Character> stack = new Stack<>();
for (int i = 0; i < x; i++) {
st = new StringTokenizer(bf.readLine());
String str = st.nextToken();
st.nextToken();
char evaluation = st.nextToken().charAt(0);
for (int j = 0; j < str.length(); j++) {
if (str.charAt(j) != ')') {
stack.add(str.charAt(j));
} else {
calc(stack);
}
}
while (stack.size() > 1) {
calc(stack);
}
if (stack.pop() == evaluation) {
bw.write((i + 1) + ": Good brain\n");
} else {
bw.write((i + 1) + ": Bad brain\n");
}
}
bw.flush();
}
private static void calc(Stack<Character> stack) {
char a = stack.pop();
while (!stack.isEmpty() && stack.peek() != '(') {
if (stack.peek() == '!') {
stack.pop();
a = (a == 't') ? 'f' : 't';
} else {
char op = stack.pop();
char b = stack.pop();
while (stack.peek() == '!') {
stack.pop();
b = (b == 't') ? 'f' : 't';
}
if (op == '&') {
a = (a == 't' && b == 't') ? 't' : 'f';
} else {
a = (a == 't' || b == 't') ? 't' : 'f';
}
}
}
if (!stack.isEmpty() && stack.peek() == '(') {
stack.pop();
}
if (!stack.isEmpty() && stack.peek() == '!') {
stack.pop();
a = (a == 't') ? 'f' : 't';
}
stack.add(a);
}
}
๋ณ์)
x : ํํ์ ๊ฐ์
stack : Stack <Character>
str : ํํ์
evaluation : ํํ์ ๋ต
Main
ํํ์ ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ํํ์ ๊ฐ์๋งํผ ํํ์์ ์ ๋ ฅ๋ฐ์ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) ํํ์๊ณผ ํํ์ ๋ต์ ๊ฐ๊ฐ str๊ณผ evaluation ๋ณ์์ ์ ์ฅ
2) ํํ์์ ์์ฐจ ํ์ํ๋ฉฐ ๋ซ๋ ๊ดํธ๊ฐ ์๋ ๊ฒฝ์ฐ stack์ ์ ์ฅ, ๋ซ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ calc ํจ์๋ฅผ ํธ์ถ
3) stack์ ํฌ๊ธฐ๊ฐ 1๋ณด๋ค ํฌ๋ค๋ฉด ์์ง ๊ณ์ฐ์ด ๋จ์์๋ค๋ ๋ป์ด๋ฏ๋ก ๋ค์ calc ํจ์๋ฅผ ํธ์ถ
4) stack์์ pop ํ ๊ฐ์ด ํํ์ ๋ต๊ณผ ์ผ์นํ๋ค๋ฉด "Good brain"์, ์ผ์นํ์ง ์๋ค๋ฉด "Bad brain"์ ์ถ๋ ฅ
Calc
stack์์ ๊ฐ์ ์ ๊ฑฐํ์ฌ ๋ณ์ a์ ์ ์ฅํ๋ค. stack์ด ๋น์ด์์ง ์๊ณ , stack์ ๊ฐ์ด ์ด๋ฆฐ ๊ดํธ๊ฐ ์๋ ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) stack์ ๊ฐ์ด !๋ผ๋ฉด NOT ์ฐ์ฐ
2) stack์ ๊ฐ์ด !๊ฐ ์๋๋ผ๋ฉด stack์์ ๊ฐ์ 2๊ฐ pop ํ์ฌ ๊ฐ๊ฐ op์ b ๋ณ์์ ์ ์ฅ ํ ๊ฐ ์ฐ์ฐ์์ ๋ง๊ฒ ์ฐ์ฐ (์ด๋, b ์์๋ NOT ์ฐ์ฐ์ด ์์ ์ ์์ผ๋ฏ๋ก ํ์ธํ๋ค.)
stack์ด ๋น์ด์์ง ์๊ณ , stack์ ๊ฐ์ด ์ด๋ฆฐ ๊ดํธ๋ผ๋ฉด ์ด๋ฆฐ ๊ดํธ๋ฅผ ์ ๊ฑฐํ๋ค. ๊ดํธ ๊ณ์ฐ ํ ์์ NOT ์ฐ์ฐ์ด ์๋์ง ํ์ธํ๋ค. ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ stack์ ์ ์ฅํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 30949_Equal Schedules (2) | 2025.07.22 |
---|---|
[Baekjoon] 9400_Calculate the Fence Needed (3) | 2025.07.21 |
[Baekjoon] 17585_Circuit Math (2) | 2025.07.17 |
[Baekjoon] 8594_Program (0) | 2025.07.16 |
[Baekjoon] 9523_Arithmetic with Morse (1) | 2025.07.15 |