본문 바로가기

코딩/프로그래머스

[프로그래머스/JAVA] 고득점Kit > 스택/큐 > 올바른 괄호 (by 다알쥐AI)

728x90

고득점Kit > 스택/큐 > 올바른 괄호

 

 

※ 주의 : 문제풀이 방법은 다양합니다. 참고만 해주세요

[문제설명]

더보기

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

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

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

제한사항

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

입출력 예


입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.


[간단설명]

모든 괄호가 '(' (왼쪽 괄호) 로 시작해서, ')' (오른쪽 괄호) 로 올바르게 끝나는지 확인하는 문제 

 

[접근방법]

1. 문자열이  ')' 로 시작하면 false 리턴

2. 해당 문자가 '(' (왼쪽괄호)이면 스택에 넣는다

3. 해당 문자가 ')' (오른쪽괄호)이면 스택에서 꺼낸다.

4. 모든 문자열 검증이 끝나고, 스택 사이즈가 0이면 true 리턴 

 

[주의사항]

오른쪽 괄호가 더 많을 경우 Exception이 생길 가능성도 생각한다.

 

[소스공개]

import java.util.*;

class Solution {
    boolean solution(String s) {
        // 오른쪽 괄호부터 시작하면 false
        if(s.charAt(0)==')') return false;
        
        // 괄호 검증용 스택
        Stack<Character> stack = new Stack<>();
        try{
            for(char c : s.toCharArray()){
                if(c=='(') stack.push(c); // 문자가 왼쪽 괄호이면, 스택에 넣는다 
                else if(c==')') stack.pop(); // 문자가 오른쪽 괄호이면, 스택에서 꺼낸다 
            }
        }catch(Exception e){
            return false; // 오른쪽 괄호가 더 많을 경우, Exception 발생 
        }

        // 모든 검증이 끝나고, 스택 사이즈가 0이면, true 
        return stack.size()==0?true:false;
    }
}

 

[실행결과]

728x90