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

성창수님의 프로필 이미지
성창수

작성한 질문수

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

6. 바둑이 승차(이진트리 DFS)

조건문

작성

·

222

0

      function solution(c, arr) {
        let answer = 0;
        let n = arr.length;
        function DFS(L, sum) {
          //if (sum > c) return;
          if (L === n) {
            console.log(sum);
            if (sum <= c) {
              answer = Math.max(answer, sum);
            }
          } else {
            DFS(L + 1, sum + arr[L]);
            DFS(L + 1, sum);
          }
        }
        DFS(0, 0);
        return answer;
      }

      let arr = [81, 58, 42, 33, 61];
      console.log(solution(259, arr));

강사님, 저는 동영상 보지 않고 혼자 풀었을 때, if(sum > c) return 대신에,
if(L === n) 만에 if(sum <= c) 조건을 넣어서 풀었는데, 그래도 답은 나오더라구요. 이렇게 하면 sum이 c보다 큰 수의 경우도 포함되어서 확인하기는 하는데, 이렇게 풀어도 크게 차이는 없나요??

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

영상처럼 if(sum > c) return;를 if(L === n) 위에 해주어야 L 이 레벨 n까지 가기 전에 sum > c이면 그 이전 레벨에서 가지치기를 해서 시간복잡도가 훨씬 좋습니다. 데이터가 큰 케이스가 들어가면 시간 차이가 많이 납니다.

성창수님의 프로필 이미지
성창수

작성한 질문수

질문하기