티스토리 뷰

 

 


 

 

 

 

더보기
import java.util.*;

class Solution {
    
    // 문제 :
    // + 괄호가 올바르게 닫혔는지 확인하여,
    // + 올바른 괄효면 true를 그렇지 않으면 false를 반환해라.
    // + 이러한 문제는 stack의 자료구조를 활용하면 보다 쉽게 해결할 수 있다.
    
    boolean solution(String s) {
        
        boolean answer = true;
        // + 올바른 괄호인지를 저장하는 변수 생성
        
        // + 1. 올바른 괄호이기 위해서는
        // + 마지막 괄호가 반드시 닫히는 괄호이어야 하며,
        // + 닫힌 괄호와 열린 괄호의 수가 같아야 하기 때문에 변수를 생성하여 파악하도록 한다.
        
        int close = 1;
        // + 닫힌 괄호를 카운트해주는 변수를 생성하고 1을 기본값으로 주어
        // + 열린 괄호가 나오면 이에 - 1씩 해주고
        // + 닫힌 괄호가 나올 시에는 + 1씩 해준다.
        
        // + 2. 문자열 s를 문자단위로 잘라 stack의 구조에 저장한다.
        
        Stack <Character> st = new Stack<>();
        
        for ( int i = 0; i < s.length(); i++ ){
            st.push(s.charAt(i));
        } // for
        
        // + 3. stack구조를 활용하여 뒤에서부터 닫힌 괄호와 열린 괄호의 수가 맞는지,
        // + 가장 마지막 괄호가 닫힌 괄호가 맞는지 확인한다.
        
        for ( int i = 0; i < s.length(); i++ ){
            
            char temp = st.pop();
            
            if ( ( i == 0 ) && ( temp == '(' ) ){
                answer = false;
                break;
            } // if : 마지막 괄호가 열린괄호일 시에는 더이상 확인할 필요가 없다.
            
            if ( temp == ')' ){
                close ++;
            } // if : 닫힌 괄호라면
            
            if ( temp == '(' ){
                close --;
                
                if ( close <= 0 ) {
                    answer = false;
                    break;
                } // 열린괄호가 닫힌괄호가 많다면 -> 올바르지 x
                
            } // if : 열힌 괄호라면
            
        } // for
        
        // + 4. 마지막으로 닫힌 괄호의 수와 열린 괄호의 수가 서로 같은지 확인한다.
        
        if ( close != 1 ){
            answer = false;
        } // if : 괄호의 수가 같으면 close의 값은 최종 1이 된다.

        return answer;
        
    } // solution
     
} // end class

 

 

 

728x90
댓글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항