76502. 괄호 회전하기

2025-12-01
프로그래머스 76502번 풀이

이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!

문제

코딩테스트 연습 - 괄호 회전하기 | 프로그래머스 스쿨

풀이

아이디어

s의 최대 길이가 1000으로 그렇게 크지 않아서 문제 그대로를 구현하면 되는 문제였다.

우선 s의 길이만큼 회전을 해 줘야 하니 s를 이어붙여서 회전 결과를 미리 만들어주었다.

const sList = [...s, ...s];

그 다음에는 s 길이만큼의 범위를 오른쪽으로 옮겨가면서 (offset을 이용하는 for loop) 스택을 이용한 괄호 짝 맞추기를 해 줬다.

괄호 짝 맞추기 방법은 올바른 괄호 와 동일하게 여는 괄호는 스택에 넣어주고, 닫는 괄호는 스택의 top과 비교해주는 방법!

코드

function solution(s) {
    let answer = 0;
    const sList = [...s, ...s];
    for (let start = 0; start < s.length; start++) {
        const stack = [];
        let isValid = true;
        for (let offset = 0; offset < s.length; offset++) {
            const c = sList[start + offset];
            if (c === '(' || c === '[' || c === '{') {
                stack.push(c);
            } else {
                const top = stack.pop();
                if (!top) {
                    isValid = false;
                    break;
                }
                if (top === '(' && c === ')') continue;
                if (top === '[' && c === ']') continue;
                if (top === '{' && c === '}') continue;
                isValid = false;
                break;
            }
        }
        if (isValid && stack.length === 0) answer++;
    }
    return answer;
}