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

🔗 문제 링크

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


🤔 문제

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

  • ()() 또는  는 올바른 괄호입니다.

    (())()

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

    (()(

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

📌 제한사항

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

😮 문제 해결 방법

"(" 열린 괄호가 들어오는 경우에는 스택에 넣어주고, ")" 닫힌 괄호가 들어오는 경우에는 스택에서 pop을 해준 후 스택이 비어있는지 확인만 해주면 문제가 해결된다.


🚩 Java 코드

package com.algorithm.Programmers.Lv2;

import java.util.Stack;

public class Solution_12909 {
    public static void main(String[] args) {
        String s = "(()(";
        System.out.println(solution(s));
    }
    private static boolean solution(String s) {
        Stack<Character> stack = new Stack<>();
        for(char c : s.toCharArray()){
            if(!stack.isEmpty() && c==')') {
                stack.pop();
                continue;
            }
            stack.push(c);
        }

        return stack.isEmpty();
    }
}

💬 코멘트

처음에 정확성은 다 맞았지만 효율성이 모두 시간초과가 발생해서 어느부분에서 문제가 발생한건지 몰랐다.

그래서 질문글을 보니 String을 자를 때 split메소드를 쓰면 시간초과가 난다고 해서 charAt메소드를 사용해서 해결하였다.

좋은 웹페이지 즐겨찾기