inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

코드 리뷰 부탁드립니다.

207

기하학곡선

작성한 질문수 4

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에 더했습니다. 괜찮은 답일까요?

javascript 코딩-테스트

답변 2

0

김태원

안녕하세요^^

네. 예외 없이 잘 나오는 코드입니다. 잘 하셨습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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;
}

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

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

continue를 사용하는 이유

0

79

2

정렬 가능 여부 판단하기

0

64

2

알고리즘 학습법 관련해서 질문드립니다.

0

86

1

코드 리뷰 부탁드립니다!

0

90

1

indexOf를 사용해서 풀어보았습니다 !!

0

68

1

저는 이런식으로 구현 해보았습니다 !!

0

64

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

100

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

63

1

영상 보기 전에 직접 풀어봤습니다.

0

74

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

136

2

정규표현식으로 처리해도 상관없나요 ?

0

120

2

3칸씩 건너뛸 수 있을 경우

0

126

2

강의에 대해 질문있습니다.

0

135

2

Object와 Set을 이용해 풀어봤습니다.

0

117

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

145

2

이렇게 풀어도 괜찮을까요?

0

138

1

이렇게 풀어도 괜찮을까요?

0

112

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

130

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

코드 맞게 작성한 거 아닌가여??

0

146

1