ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 9012 - 괄호
    자료구조와 알고리즘/문제풀기 2023. 4. 4. 20:19

    괄호가 짝이 맞는지 찾는 문제이다.

     

    -해결방법 

    1. 괄호는 ()형태만 가능하다. 

    2. (만 저장했다가 )가 나오면 삭제 이때  닫는괄호)가 먼저나오면 ->불완전한 괄호 

    3 입력받은 모든 문자열이 검사가 끝났을 때, 저장된 것이 없다면 -> 완벽한 괄호 

                                                                            (가 남아 있다면 -> 불완전한 괄호 

     

    풀이1

    public class Main{
       public static void main(String[] args) throws Exception {
             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
             BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
             int t = Integer.valueOf(br.readLine());
             String input;
    
             while(t-->0){
                 input = br.readLine();
                 bw.write(vos(input)+"\n");
    
             }
    
            bw.flush();
            bw.close();
    
        }
    
        private static String vos(String input) {
            Stack s = new Stack<>();
            for(char a: input.toCharArray()){
                if(a == ')'){
                    try{
                    s.pop();
                    }catch(Exception e){
                        return "NO";
                    }
                }
                else s.push(a);
            }
            if(s.empty()) return "YES";
            else return "NO";
        }
    
    }

     

    배운점 

    - 스택 이용하기

    - 백준에서 출력 값 대소문자 강력구분한다는 점 !! -> 너무 빨리 틀렸습니다 뜨면 거의 입출력 실수

     

    - 중첩 반복문 구조에서 내부 반복문을 break하면서, 외부 반복문을 continue해야하는 너낌을 줘야할 때 

      따로 메서드로 빼서 값을 return해주는 방법을 생각해보자.. 

     while(t-- > 0){
                input = br.readLine();
                error = false;
                for(char a : input.toCharArray()){
                    if(a == ')') {
                        try{
                            Sstack.pop();
                        }catch (EmptyStackException e){ // 내부반복문 종료, 새로운 입력받아야함(외부 컨티뉴)
                            bw.write("NO\n");
                            error = true; 
                            break;}
                    }
                    else Sstack.push(a);
                }
                //error값이 없으면 내부반복문 종료되면서 내부반복문이 모두 종료된 후에 실행해야하는 문장을 실행함
                if(!error && Sstack.empty()) bw.write("YES\n");
                if(!error && !Sstack.empty()) bw.write("NO\n");
                Sstack.clear();
            }

    물론 반복문 안에서 어떤 플래그 값을 이용해서 구분해서 할 수 도 있긴하다! 

    '자료구조와 알고리즘 > 문제풀기' 카테고리의 다른 글

    백준 10845 - 큐 구현  (0) 2023.04.05
    백준 1406 - 에디터  (0) 2023.04.05
    백준 1874 - 스택수열  (0) 2023.04.04
    백준 9093 - 단어뒤집기  (0) 2023.04.04
    백준 10828 - 스택 구현  (0) 2023.04.04
Designed by Tistory.