코딩테스트/Programmers

[Programmers | Java] 올바른 괄호

박 성 하 2024. 3. 21. 23:23
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

티어

소요 시간

5분

분류

스택

코드

스택

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

        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (stack.isEmpty() || c == '(') {
                stack.add(c);
            }
            else {
                char pop = stack.pop();
                if (pop != '(') {
                    answer = false;
                    break;
                }
            }
        }
        
        if (!stack.isEmpty()) {
            answer = false;
        }

        return answer;
    }
}

cnt

class Solution {
    boolean solution(String s) {
        int cnt = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                cnt++;
            }
            else {
                if (--cnt < 0) {
                    return false;
                }
            }
        }

        return (cnt != 0) ? false : true;
    }
}

코드 설명

스택을 통해서 '('와 ')'를 짝지어주면 된다.

 

두 번째 코드는 스택을 사용하지 않으면서 최적화를 한 코드인데 cnt를 통해 괄호의 개수를 센다.

닫힌 괄호일 경우 괄호를 소거한다는 의미로 cnt값을 감소시키는데 이 때 cnt값이 음수가 될 경우 짝이 맞지 않는 상태인 것이기 때문에 이를 분기한다.

728x90

'코딩테스트 > Programmers' 카테고리의 다른 글

[Programmers | Java] 혼자 놀기의 달인  (0) 2024.03.20