본문 바로가기
코딩테스트/프로그래머스

프로그래머스 | JAVA | 올바른 괄호

by 개발송이 2022. 10. 18.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12909

문제 설명

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

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

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

 

입출력 예시

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

 

Solution

풀이 과정

1. 주어진 문자열을 하나씩 잘라 배열에 담는다.

2. for문을 사용해 배열에서 '('가 오면 stack에 push, ')'가 오면 pop을 한다.

3. ')'가 왔을 때 stack이 비어있으면 이전에 '('가 없었다는 것을 의미하기 때문에 false를 return.

4. stack이 비어있지 않으면 pop을 해서 짝을 맞춘다.

5. 주어진 데이터만큼 for문을 다 돌렸을 때 stack이 비어있지 않으면 짝이 맞지 않다는 결과이니 false를 반환한다.

 

 

최종 풀이

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        
        // 주어진 문자열을 배열로 하나씩 담는다.
        char[] c = s.toCharArray();
        
        // 검사를 진행할 stack을 만든다.
        Stack<Integer> stack = new Stack<>();
        
        for (char ch : c) {
            if (ch == '(') {
                stack.push(1);
            } else {
                if (stack.isEmpty()) {
                    return false;
                } else {
                    stack.pop();
                }
            }
        }
        System.out.println(stack);
        
        // 검사진행을 완료한 후 stack이 비어있지 않다면 false를 반환
        if (stack.isEmpty() == false) {
            return false;
        }

        return answer;
    }
}