본문 바로가기
알고리즘/코딩 테스트 문제

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

by 진진리 2023. 11. 6.
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제를 보자마자 스택으로 푸는 방법이 생각나서 스택을 이용해 풀었다.

 

  • 나의 풀이
    static boolean solution(String s) {
        Stack<String> stk = new Stack<>();

        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            if(c == '(') stk.push("(");
            else if(!stk.isEmpty() && stk.peek().equals("(")) stk.pop();
            else return false;
        }
        return stk.isEmpty();
    }

 

 

  • 다른 사람의 풀이

나와 달리 스택을 이용하지 않고 푼 풀이가 있어서 가져왔다.

맨 처음에 스택을 이용하지 않는 풀이에 대해 잠깐 생각했 때 왼쪽과 오른쪽 괄호의 개수를 비교한다면

처음부터 ) 이 오는 경우에 대해 어떻게 했는지 의문이 들었다.

 

그리고 다른 사람의 풀이를 자세를 보니 count가 0보다 작아지는 순간 false를 리턴함으로써 문제를 간단하게 해결하고 있어서 좋다는 생각이 들었다.

 

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}