작성
·
166
0
function solution(s) {
let answer = "";
let stack = [];
for (let x of s) {
if (x === "(") stack.push(x);
else if (x === ")") {
stack.pop();
} else if (stack.length === 0) answer += x;
}
return answer;
}
")"문자를 만나기 전까지 모두 push() 하는것이 아닌 알파벳 문자를 만났을때 스택에 괄호가 존재한다면 괄호로 감싸진 문자열이기 때문에 0일때만 answer에 더했습니다. 괜찮은 답일까요?
답변 2
0
0
안녕하세요, 인프런 AI 인턴이에요. 코드 리뷰 요청 감사합니다.
주어진 코드를 살펴보면, 문자열 s에 있는 괄호로 감싸진 문자열을 추출하는 로직 같아 보입니다. 알파벳 문자를 만났을 때 스택에 괄호가 존재한다면 괄호로 감싸진 문자열이라고 가정하고, 괄호인지 확인한 후 answer에 더하는 부분이 있습니다.
주어진 요구사항에 따라서는 정상 동작할 수도 있지만, 몇 가지 문제가 있어 개선이 필요할 것 같습니다.
문제의 제약사항에 따라 스택에 괄호가 존재하는지 확인하는 부분은 필요하지 않습니다. 왜냐하면 스택에 있는 괄호가 없어도 알파벳 문자가 나온다면 그 문자도 괄호로 감싸진 문자열이 아닐 수 있기 때문입니다. 예를 들어, “a(b)c”와 같은 문자열의 경우에도 처리가 되어야 합니다.
스택에서 “(” 문자를 pop할 때 스택이 비어있을 경우에 대한 처리가 없습니다. 이 경우에는 pop할 괄호가 없기 때문에 오류가 발생할 것입니다. 따라서, pop 연산을 하기 전에 스택이 비어있는지 확인하는 로직을 추가해야 합니다.
변수명이 일부 헷갈릴 수 있습니다. x는 괄호나 알파벳 문자를 가리키고, 스택에는 “(” 문자만 저장되는데, 변수명을 좀 더 명확하게 지어주는 것이 좋을 것 같습니다. 예를 들어, 표현력을 좀 더 갖게 하기 위해 stack 변수를 bracketStack이나 openingBracketStack으로 변경해보세요.
개선된 코드는 아래와 같습니다.
function solution(s) {
let answer = "";
let openingBracketStack = [];
for (let character of s) {
if (character === "(") {
openingBracketStack.push(character);
} else if (character === ")") {
if (openingBracketStack.length !== 0) {
openingBracketStack.pop();
}
} else if (openingBracketStack.length === 0) {
answer += character;
}
}
return answer;
}
이렇게 개선된 코드로 테스트를 하면, 주어진 문자열에서 괄호로 감싸진 문자열을 정상적으로 추출할 수 있을 것입니다. 이상적으로는 테스트 케이스를 더 추가하여 코드의 정확성을 보장해야 하지만, 제가 주어진 설명을 바탕으로 가장 핵심적인 개선점을 설명드렸습니다.
추가적인 궁금한 사항이 있으시면 언제든지 질문해주세요. 도움이 되었기를 바라며, 좋은 결과 있기를 기대합니다. 감사합니다!