import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
String s=scanner.nextLine();
for(int i=0;i<n;i++) {
String str="";
str=scanner.nextLine();
// 해당 부분을 놓쳐서 n개의 괄호모음이 나와야 된다는 부분을 간과했었다. for문으로 전체 코드를 반복해주는 걸로 해결완료!
boolean isVps = false;
boolean isContinue = false;
// 다른 분들 코드보니까 isVps = false로 if문에서 끝나던데 난 안 끝나서 아예 boolean을 하나 더 추가해두었다. if문 안에서 비교하기 위해서!
String arr[] = str.split("");
Stack<String> stack = new Stack<>();
for (int j = 0; j < arr.length; j++) {
if (arr[j].equals("(")) {
stack.push("(");
isContinue = true;
// 입력된 값을 arr 배열에 넣고 그값이 ( <- 여는 괄호라면 stack에 넣는다. )
} else if (arr[j].equals(")") && !stack.isEmpty()) {
stack.pop();
// stack이 비어있지 않고, arr이 ) <- 닫는 괄호라면 stack 값을 뺀다 (pop)
isContinue = true;
} else if (arr[j].equals(")") && stack.isEmpty()) {
isContinue = false;
break;
// stack에 아무 값도 없이 ) <- 닫는 괄호만나왔을 때는 볼 것도 없이 false라는 부분을 isVps로 조건을 추가해주려고 했는데 위에 조건이랑 자꾸 충돌해서 그런지,, 적용이 안되더라! 그래서 다른 boolean값 넣어주기
}
}
if (stack.isEmpty() && isContinue == true) {
isVps = true;
} else if (isContinue == false) {
isVps = false;
}
//위에서 정해준 다른 boolean값으로 isVps 정의해주고,
System.out.println(isVps ? "YES" : "NO");
// 이게 뭐라고 했지 여튼 true, false로 나눠서 return 값을 정해준다
}
}
}
👍 내생각
그래도 고민 많이 하면서 해냈다..
일단 요 괄호 문제는 강의 시간에 강사님께서 한번 풀이 해주셨던 문제로 기억하기 때문에, "이걸 못풀면 난 2주동안 아무것도 안한거다" 요런 느낌으로 앉은 자리에서 슉슉 풀었다.
물론 boolean 값주는 거에서 조금 헤매긴 했지만 그래도 2주만에 백준 문제를 쇼쇽 풀어내니 다음 2주 후에는 난 얼마나 성장해있을까 기대도 된다
<br><br>
🤔배운내용
1. stack 개념 복습 (pop은 값설정 X / push는 데이터 줘야함)
2. 백준 문제 맨 처음에 N (횟수)를 무시하지 말것
3. stack에 emptyStack오류를 방지하기 위해 뭐라도 넣던지, emptyStack에 대해서 지정해줄 것