[프로그래머스][Java] 올바른 괄호 (Lv.2) - 스택/큐

박현아·2025년 3월 25일
1

programmers-java

목록 보기
34/35

👩‍💻 문제

🙋‍♀️ 답변

class Solution {
    boolean solution(String s) {
        
        // 1. String s 를 한 글자씩 잘라서 확인한다.
        // (시작은 무조건 '(' 이어야 된다. ')'면 바로 false 리턴.)
        // 2. (와 )의 수를 각각 카운트한다. 수가 같다면 true 리턴.
        // 3. 하지만 (의 수가 ) 보다 작다면 false 리턴.
        
        boolean answer = true;
        int count1 = 0;
        int count2 = 0;
        
        for(int i=0; i<s.length(); i++) {
            
            if(s.charAt(0) == '(') {
                if(s.charAt(i) == '(') {
                    count1 += 1;
                } else {
                    count2 += 1;
                }
                if (count1 < count2) {
                    return false;
                }
            } else {
                return false;
            }
        }
        
        answer = (count1 == count2) ? true: false;
        
        return answer;
    }
}

🤔

나는 (와 )의 카운트를 각각해서 마지막에 그 수가 같은지 비교하는 방법으로 풀었는데, 카운트를 하나만 해서 +, -를 해서 0이 되는 경우 true를 리턴하는 방법이 더 깔끔하다.

👇 count 변수 한 개만 사용하는 방법

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        int count = 0;
        
        char[] sArray = s.toCharArray();
        
        for(char c : sArray) {
            if(c == '(') {
                count++;
            } else {
                count--;
                if(count < 0) return false; // ')'가 먼저 나오면 false 리턴
            }
        }

        answer = count == 0 ? true : false;
        
        return answer;
    }
}

정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0

👇 Stack을 사용하는 방법

import java.util.Stack;

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        Stack<Character> stack = new Stack<>();
        
        for(char c : s.toCharArray()) {
            if(c == '(') {
                stack.push(c);
            } else {
                if(stack.isEmpty()) return false;
                stack.pop();
            }
        }
        
        answer = stack.isEmpty()? true: false;
        
        return answer;
    }
}

정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0

0개의 댓글