😎풀이

  1. 괄호가 올바른지 판별하는 isValid함수 선언
  2. 방문 기록을 기록할 visited Set 변수 선언
  3. 결괏값을 기록할 result Set 변수 선언
  4. queue의 요소가 있는동안 순회
    4-1. 현재 등록된 요소의 모든 자릿수를 제외해보며 순회
    4-2. 단, 최소한의 변환을 해야하므로 이미 정상적인 괄호로 변환한 기록이 있다면 추가 변환은 실시하지 않음
  5. 올바른 괄호 반환
function removeInvalidParentheses(s: string): string[] {
    function isValid(text: string) {
        let count = 0
        for(const char of text) {
            if(char === '(') count++
            else if(char === ')') {
                if(count === 0) return false
                count--
            }
        }
        return count === 0
    }
    const visited = new Set<string>()
    const result = new Set<string>()
    const queue = [s]
    let found = false
    while(queue.length) {
        const curr = queue.shift()
        if(isValid(curr)) {
            result.add(curr)
            found = true
        }
        if(found) continue
        for(let i = 0; i < curr.length; i++) {
            if (curr[i] !== '(' && curr[i] !== ')') continue;
            const sliced = curr.slice(0, i) + curr.slice(i + 1)
            if(!visited.has(sliced)) {
                queue.push(sliced)
                visited.add(sliced)
            }
        }
    }
    return Array.from(result)
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글