[프로그래머스/12909] 올바른 괄호

☑️ 문제

프로그래머스 12909

☑️ 풀이

  • Stack을 이용하여 괄호의 짝을 맞춰주려고 했다.
  • Stack이 비어있을 때
    • 현재 괄호가 ( 인 경우, Stack에 넣어준다.
    • 현재 괄호가 ) 인 경우, 괄호의 짝이 맞지 않기 때문에 false를 반환한다.
  • Stack이 비어있지 않을 때
    • 현재 괄호가 ( 인 경우, Stack에 넣어준다.
    • 현재 괄호가 ) 인 경우, Stack에 마지막으로 들어온 괄호가 ( 이면 괄호의 짝이 맞기 때문에 Stack에서 pop() 해준다.
  • 이런 식으로 s의 끝까지 반복한 후에,
    • Stack이 비어 있다면 괄호의 짝이 다 맞은 것이기 때문에 true를 반환한다.
    • Stack이 비어 있지 않다면 짝이 맞지 않은 괄호가 존재하기 때문에 false를 반환한다.
// 시간: 0.64ms
// 메모리: 89MB

import java.util.*;

class Solution {
    boolean solution(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (stack.isEmpty() && c == '(') {
                stack.push(c);
            } else if (stack.isEmpty() && c == ')') {
                return false;
            } else {
                char top = stack.peek();
                if ((top == '(') && (c == ')')) {
                    stack.pop();
                } else {
                    stack.push(c);
                }
            }
        }

        if (!stack.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }
}

☑️ 문법 정리 - 문자열 추출

  • 문자열 추출
    • a.charAt(i) : 문자열 a의 i번째 문자를 추출
      • charAt()char 타입의 값을 반환 ⇒ char 값 비교 시에는 작은 따옴표를 사용! (큰따옴표는 문자열 string)

© 2021. All rights reserved.

yaejinkong의 블로그