Algorithm
프로그래머스
Java
올바른 괄호

올바른 괄호

https://school.programmers.co.kr/learn/courses/30/lessons/12909?language=java (opens in a new tab)

내 풀이

효율성 테스트에서 시간 초과가 발생했다.

import java.util.*;
 
class Solution {
    boolean solution(String s) {
        boolean answer = false;
        String[] arr = s.split("");
        Stack<String> stack = new Stack<String>();
        int size = 0;
        for(String a : arr) {
            if(a.equals("(")) {
                stack.push(a);
                size ++;
            }
            else if(size > 0 && a.equals(")")) {
                size --;
                stack.pop();
            } else {
                size ++;
                break;
            }
        }
        if(size == 0) {
            answer = true;
        }
        return answer;
    }
}

정답 풀이

import java.util.*;
 
class Solution {
    boolean solution(String s) {
        Stack<Character> stack = new Stack<>();
        
        char[] a = s.toCharArray();
        for(char c: a) {
            if(c == '(') {
                stack.push(c);
            }
            else {
                if(stack.isEmpty() || stack.pop() == c) {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}

배운점

.split() 메서드는 toCharArray에 비해서 더 큰 시간 복잡도를 가질 수 있다는 것을 배웠다.

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        char[] arr = s.toCharArray();
        Stack<Character> stack = new Stack<Character>();
        int size = 0;
        for(char a : arr) {
            if(a == '(') {
                stack.push(a);
                size ++;
            }
            else if(size > 0 && a == ')') {
                size --;
                stack.pop();
            } else {
                size ++;
                break;
            }
        }
        if(size == 0) {
            answer = true;
        }
        return answer;
    }
}