Computer Engineering/알고리즘 테스트

프로그래머스 코딩테스트 문제: 올바른 괄호

말하는호구마 2020. 3. 12. 20:41

프로그래머스 level2의 문제이다.

쇠막대기라는 문제와 꽤 유사해서 한번에 stack을 사용하면 될 것 같았다.

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

 

 

 

단순하게 (와 )의 개수가 같을 것 이라고 생각하면 안된다. 개수는 맞을지라도 짝이 맞지 않으면 안되니!

import java.util.*;
class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<String> stc=new Stack<>();
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='(')
                stc.push("(");
            else{
                if(!stc.empty())
                    stc.pop();
                else
                    answer=false;
            }
        }
        if(!stc.empty())
            answer=false;
        return answer;
    }
}

(을 스택에 쌓고 )를 만나면 pop을한다. 

for문을 끝까지 돌았는데 쌓여있는 스택이 있다면 짝이 맞지 않은 것이기 때문에 이도 false처리해준다. 

 

 

다른 댓글을 보며 알게 된 사실인데 pop(0)을 해도 pop이 되는 것 같았다.

하지만 이렇게 하면 시간이 오래걸려 효율성 테스트를 통과하지 못하는 모양이다.