Question
문제 해설
- 괄호 문자열 = '('와 ')'로만 이루어진 문자열
- 올바른 괄호 문자열 = 괄호의 모양이 바르게 구성된 괄호 문자열
- 괄호가 열린만큼 닫혀야 한다 = 짝맞춰서 이루어져야함
- 닫을 괄호가 없는데 닫으면 안됨
- 입력으로 주어진 괄호 문자열이 올바른 괄호 문자열인지 판단
Solution
풀이 접근 방법
- 괄호 문제 = 스택 사용
- 스택 = 여는 괄호만 담아져있음
- 여는 괄호 = 스택에 넣음, 닫는 괄호 = 스택에서 여는 괄호 뽑아서 정상적인 괄호로 판별
정답 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.valueOf(br.readLine());
StringBuilder answer = new StringBuilder();
while (T-- > 0) {
String s = br.readLine();
if (checkYps(s))
answer.append("YES\n");
else
answer.append("NO\n");
}
bw.write(answer.toString() + "\n");
bw.flush();
bw.close();
}
public static boolean checkYps(String s) {
char[] sArr = s.toCharArray();
Stack<Character> vps = new Stack<Character>();
if (sArr[0] == ')')
return false;
for (int i = 0; i < sArr.length; i++) {
if (sArr[i] == '(')
vps.add(sArr[i]);
else {
if (vps.isEmpty())
return false;
vps.pop();
}
}
if (vps.isEmpty())
return true;
else
return false;
}
}