728x90

 

 

문제

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

 

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

 

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

 

입출력 예

answer
"()()" true
"(())()"  true
")()(" false
"(()("  false

 

 

코드

 

import java.util.*;

class Solution {
    boolean solution(String s) {

        char[] arr = s.toCharArray();
        
        //빠른 탈출
        if(arr[0] == ')' || arr[arr.length-1] == '(') return false;
        
        Deque<Character> stack = new ArrayDeque<>();
        for(char c : arr){
            if(c == '('){
                stack.add(c);
            }else{
                while(stack.size()>0){
                    char temp = stack.poll();
                    // 짝을 찾으면 나간다
                    if(temp == '(') break;
                }
            }
        }
        
        return stack.size()==0?true:false;
    }
}

 

 

풀이

 

 

문자열을 char형 배열로 바꿉니다!

 

무조건

 

맨 앞에는  가,

 

맨 뒤에는  가 와야 True가 됩니다.

 

아무튼 넘어가서

 

char 배열을 하나씩 보면서

 

 (  이면 스택에 담고

 

 )  를 만나면   (  를 만날때까지 poll 해줍니다.

 

그렇게 다 돌렸는데 stack의 사이즈가 0이면 true이고

 

1개라도 남아 있으면 false 입니다.

 

다음에 또 봐요

 

+ Recent posts