괄호 짝 맞추기

배고픈 징징이 ㅣ 2024. 5. 8. 19:54

1. 문제

'(', ')', '{', '}', '[', ']', '<', '>' 문자만 포함하는 문자열 s가 주어지면 입력 문자열이 올바른지 확인하여 결과를 출력하라.

입력 문자열은 다음과 같은 경우에 유효하다:

 

- 열린 괄호는 동일한 형식의 괄호로 닫아야 한다.

- 열린 괄호는 올바른 순서로 닫아야 한다.

- 모든 닫힌 괄호에는 동일한 유형의 열린 괄호가 있다.

 

제약 조건

1 ≤ s.length ≤ 10⁴

s는 '()[]{}<>'의 괄호로만 구성된다.

 

2. 코드

public class MatchBracket {
    public static void main(String[] args){
        //String s = "({[[]]})";
        //String s = "({[[]]})>";
        //String s = "[({[[]]})>";
        //String s = "){[[]]})";
        String s = "{[[]]{";

        System.out.println(solution(s));
    }

    public static boolean solution(String s){
        //짝이 안맞으면 실패
        if(s.length() % 2 != 0) return false;

        Stack<Character> stack = new Stack<>();

        String open = "({[<";
        String close = ")}]>";

        for (int i = 0; i < s.length(); i++) {
            char target = s.charAt(i);

            if(open.indexOf(target) > -1) stack.add(target);
            else{
                //닫는 괄호만 남아있으면 실패, 짝이 맞지 않으면 실패
                if(stack.isEmpty() || open.indexOf(stack.peek()) != close.indexOf(target)) return false;

                stack.pop();
            }
        }

        //열린 괄호가 남아있으면 실패
        return stack.isEmpty();
    }
}
반응형

'Algorithm > - Coding Test' 카테고리의 다른 글

요격 시스템  (0) 2024.07.19
석유 시추  (0) 2024.04.24
Donut  (0) 2024.02.01