BackJoon_9012

위서연·2023년 4월 17일

BackJoon

목록 보기
2/5

백준 9012 문제

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에 대해서 지정해줄 것

0개의 댓글