
😎풀이
- 괄호가 올바른지 판별하는
isValid
함수 선언
- 방문 기록을 기록할
visited
Set 변수 선언
- 결괏값을 기록할
result
Set 변수 선언
queue
의 요소가 있는동안 순회
4-1. 현재 등록된 요소의 모든 자릿수를 제외해보며 순회
4-2. 단, 최소한의 변환을 해야하므로 이미 정상적인 괄호로 변환한 기록이 있다면 추가 변환은 실시하지 않음
- 올바른 괄호 반환
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)
};