๋ฌธ์
๊ดํธ( ), { }, [ ]
๊ฐ ํฌํจ๋ ์์์ ์
๋ ฅ ๋ฐ๊ณ ํด๋น ์์์ ๊ดํธ๊ฐ ์ ๋ซํ ์๋์ง ํ์ธํ๋ผ.
์์ ์ ๋ ฅ & ์ถ๋ ฅ
$ 2 * (3 + 10)) - 1 + [(10 + 10 + {20 + 1})]
$ ์ ๋ต
$ (3 + 10) * ((3) * 2 / 4) - 1 + [{(10 + 10 + {20 + 1})]
$ ์ค๋ฅ
์ ๋ต ์ฝ๋
์ ๊ทผ ๋ฐฉ๋ฒ
์ฌ๋ ๊ดํธ๋ค์ ๋ง๋ ๋ ๋ง๋ค stack์ ์ถ๊ฐํ๊ณ ๋ซ๋ ๊ดํธ๋ฅผ ๋ง๋ ๋ ๋ง๋ค stack์์ popํ๋ค.
๋จ, ์ด ๊ณผ์ ์์ stack์์ pop ํ ๊ดํธ๊ฐ ๋ซ๋ ๊ดํธ์ ์ง์ด ๋ง๋์ง๋ฅผ ๊ฒ์ฆํ๋ค.
์ค๋ต ํ๋ณด
์ค๋ต์ธ ๊ฒฝ์ฐ์ ํ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋ณด์.
- ์์ธ ํ๋ณด : stack ์ด ๋น์ด์๋๋ฐ )}]๋ฅผ ๋ง๋์ pop ํ๋ ค๋ ๊ฒฝ์ฐ
- ์์ธ ํ๋ณด : ๋ฌธ์์ด ๊ฒ์ฆ์ด ๋๋ฌ๋๋ฐ stack ์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ
- ์์ธ ํ๋ณด : stack ์์ pop ํ ๊ฐ๊ณผ ์์ ๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
import java.util.Stack;
public class Main {
/* ์์ธ 1 : stack ์ด ๋น์ด์๋๋ฐ )}]๋ฅผ ๋ง๋์ pop ํ๋ ค๋ ๊ฒฝ์ฐ
* ์์ธ 2 : ๋ฌธ์์ด ๊ฒ์ฆ์ด ๋๋ฌ๋๋ฐ stack ์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ
* ์์ธ 3 : stack ์์ pop ํ ๊ฐ๊ณผ ์์ ๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
**/
public static void main(String[] args) {
Stack<Character> stack = new Stack<>();
String correct = "2 * (3 + 10)) - 1 + [(10 + 10 + {20 + 1})]";
String incorrect = "[(({(])}))";
int answer = 0;
char[] arr = correct.toCharArray();
for(char iter : arr) {
pushStack(stack, iter);
answer = checkCondition(stack, iter);
if(answer != 0) break;
}
if(stack.isEmpty() && answer == 0) System.out.println("์ ๋ต"); // ์์ธ 2 ๊ฒ์ฆ
else System.out.println("์ค๋ต");
}
private static void pushStack(Stack<Character> stack, char c) {
if((c == '(') || (c == '{') || (c == '[')) {
stack.push(c);
}
}
private static int checkCondition(Stack<Character> stack, char c) {
if((c == ')') || (c == '}') || (c == ']')) {
if(stack.isEmpty()) return 1; // ์์ธ 1
else { // ์์ธ 3
char pop = stack.pop();
if( (pop == '(' && c == ')')
|| (pop == '{' && c == '}')
|| (pop == '[' && c == ']')) return 0;
else return 3;
}
}
return 0;
}
}
๋๊ธ