인프런 커뮤니티 질문&답변

기하학곡선님의 프로필 이미지
기하학곡선

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

2. 괄호 문자 제거(스택)

코드 리뷰 부탁드립니다.

작성

·

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에 더하는 부분이 있습니다.

주어진 요구사항에 따라서는 정상 동작할 수도 있지만, 몇 가지 문제가 있어 개선이 필요할 것 같습니다.

  1. 문제의 제약사항에 따라 스택에 괄호가 존재하는지 확인하는 부분은 필요하지 않습니다. 왜냐하면 스택에 있는 괄호가 없어도 알파벳 문자가 나온다면 그 문자도 괄호로 감싸진 문자열이 아닐 수 있기 때문입니다. 예를 들어, “a(b)c”와 같은 문자열의 경우에도 처리가 되어야 합니다.

  2. 스택에서 “(” 문자를 pop할 때 스택이 비어있을 경우에 대한 처리가 없습니다. 이 경우에는 pop할 괄호가 없기 때문에 오류가 발생할 것입니다. 따라서, pop 연산을 하기 전에 스택이 비어있는지 확인하는 로직을 추가해야 합니다.

  3. 변수명이 일부 헷갈릴 수 있습니다. 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;
}

이렇게 개선된 코드로 테스트를 하면, 주어진 문자열에서 괄호로 감싸진 문자열을 정상적으로 추출할 수 있을 것입니다. 이상적으로는 테스트 케이스를 더 추가하여 코드의 정확성을 보장해야 하지만, 제가 주어진 설명을 바탕으로 가장 핵심적인 개선점을 설명드렸습니다.

추가적인 궁금한 사항이 있으시면 언제든지 질문해주세요. 도움이 되었기를 바라며, 좋은 결과 있기를 기대합니다. 감사합니다!

기하학곡선님의 프로필 이미지
기하학곡선

작성한 질문수

질문하기