본문 바로가기

코딩테스트/programmers

올바른 괄호

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

 

프로그래머스

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

programmers.co.kr

 

괄호가 제대로 쌍을 이루었는지 체크하면 된다.

 

문제 분류는 스택/큐 에 속해 있으므로 스택을 쓰면 된다는 힌트가 있지만, 스택없이 단순 카운팅 만으로도 해결 된다.

 

그래도 문제의 취지에 맞게 스택을 사용한 버전도 같이 써봄

import java.util.*;

class Solution {
    boolean solution(String s) {
        char[] ca = s.toCharArray();
        
        // 스택 미사용
        // return withoutStack(ca);
        
        // 스택 사용
        return withStack(ca);
    }
    
    boolean withoutStack(char[] ca) {
        
        int cnt = 0;
        for (char c : ca) {
            if (c == '(') {
                // 괄호가 열리면 카운팅
                cnt++;
            } else {
            	// 괄호가 닫히면 마이너스.
                // 열린 괄호보다 닫힌 괄호가 많아지는 순간 잘못된 괄호이다.
                if (--cnt < 0) return false;
            }
        }
        
        // 마지막으로 덜 닫힌 괄호 체크
        return cnt == 0;
    }
    
    boolean withStack(char[] ca) {
        
        Stack<Character> stack = new Stack();
        
        for (char c : ca) {
            if (c == '(') {
                // 괄호가 열리면 스택에 넣고,
                stack.push(c);
            } else {
                // 괄고가 닫히면 스택에서 제거한다.
                // 열린 괄호가 없다면 잘못된 괄호.
                if (stack.isEmpty()) return false;
                stack.pop();
            }
        }
        
        // 덜 닫힌 괄호 체크
        return stack.isEmpty();
        
    }
}

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

숫자의 표현  (0) 2023.09.11
이진 변환 반복하기  (0) 2023.09.11
최솟값 만들기  (0) 2023.09.07
JadenCase 문자열 만들기  (0) 2023.09.07
최댓값과 최솟값  (0) 2023.09.07