inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4. 부분집합 구하기(이진트리 DFS)

코드 검사 부탁드립니다!

271

00

작성한 질문수 28

0

안녕하세요 이진트리 개념 듣고 강의 듣기전에 한번 풀어보았는데 이런 식으로 작성해도될까요? 틀린부분 있으면 피드백 부탁드립니다!

function solution(k) {
  let answer = [];
  function dfs(n, arr) {
    let arr1 = [...arr, n];
    if (n > k) {
      arr.length && answer.push(arr);
      return;
    } else {
      dfs(n + 1, arr);
      dfs(n + 1, arr1);
    }
  }
  dfs(1, []);
  return answer;
}

 

javascript 코딩-테스트

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
00님, 제공하신 자바스크립트 코드에 대한 피드백을 드리겠습니다.

구현하신 코드는 이진 트리의 개념을 활용하여 문제를 풀기 위한 DFS(깊이 우선 탐색) 알고리즘을 작성하신 것으로 보입니다. 코드를 살펴 보았을 때, 재귀 함수를 이용하여 n이 k보다 클 때까지 왼쪽 자식 노드(n+1)와 오른쪽 자식 노드(n+1)로 재귀적으로 탐색하며, 특정 조건에 따라 answer 배열에 결과를 추가하고 있습니다.

다만, 코드에서 작은 수정이 필요해 보입니다. arr.length && answer.push(arr); 부분에서 arr.length가 0일 때는 answer에 추가하지 않도록 되어 있으나, arr이 비어있을 때(즉, n이 1일 때 시작하는 경우)의 결과는 누락될 수 있습니다. 따라서 n이 k보다 클 때, arr이 비어있지 않은 경우에만 결과를 추가하도록 조건을 수정해야 합니다.

또한 트리의 깊이가 k를 넘어섰을 때는 더 이상 깊이 우선 탐색을 계속하지 않도록 arr1 배열로의 재귀 호출을 중지해야 합니다.

수정된 코드의 예시는 다음과 같습니다:

function solution(k) {
  let answer = [];
  function dfs(n, arr) {
    if (n > k) {
      if (arr.length > 0) {
        answer.push(arr);
      }
      return;
    }
    let arr1 = [...arr, n];
    dfs(n + 1, arr);
    dfs(n + 1, arr1);
  }
  dfs(1, []);
  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

135

2

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

0

120

2

3칸씩 건너뛸 수 있을 경우

0

125

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