[프로그래머스/Java] 괄호 회전하기

Yujin·2025년 6월 18일

CodingTest

목록 보기
28/51

문제

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


접근 방법

  1. 기존 문자열 s를 두개 합쳐 새로운 문자열을 만든다
  2. s의 길이만큼 문자열을 회전시킨다 -> 그 회전시킨 값의 유효성 판단
  3. 유효성 판단: 만약 현재 문자가 (,{,[ 처럼 여는 괄호면 stack 에 push
    닫는 괄호일때 pop 해서 꺼냄
    꺼낸 문자가 다음 확인한 문자와 닫고열리는 관계가 아니면 false
    닫는 괄호가 남았는데 stack 이 비어도 false
    최종적으로 stack이 비었으면 true 반환
  4. 유효성 판단으로 true 가 나오면 answer ++

코드 구현

import java.util.*;

class Solution {
    public int solution(String s) {
        String sb = s + s;
        int answer = 0;
        for(int i = 0; i < s.length(); i++){
            if(isValid(sb.substring(i, s.length() + i))) answer++;
        }
        return answer;
    }
    
    public boolean isValid(String s){
        Deque<Character> stack = new ArrayDeque<>();
        for(char current : s.toCharArray()){
            if(current == '[' || current == '{' || current == '(')
                stack.push(current);
            else{
                if(stack.isEmpty()) return false;
                
                char target = stack.pop();
                if((target == '(' && current != ')')||
                   (target == '[' && current != ']')||
                   (target == '{' && current != '}'))
                    return false;
            }
        }
        return stack.isEmpty();
    }
}

0개의 댓글