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

00님의 프로필 이미지
00

작성한 질문수

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

13. 수열 추측하기(순열, 이항계수 응용)

강의 질문 및 코드 리뷰

작성

·

282

0

안녕하세요 이번 강의를 듣고 선생님께서 알려주신 풀이 방법을 이해하게 되었습니다 감사합니다!

다만 제가 몇가지 질문이 있어 글 올립니다!

1 . 풀이 방향이 각각의 (조합) * (숫자) 의 합이 되는데 왜 마지막 숫자가 (조합) * (숫자) 의 합이 되나요 ???

  1. 제가 강의를 듣기전에 혼자서 코드를 짜보았는데 왜 이 코드는 답이 안나오는지 여쭈고 싶습니다!

function solution(n, end) {
  let mem_arr = Array.from(Array(n + 1), () => Array(n + 1).fill(0)); // 메모이제이션
  let comb_arr = Array.from({ length: n }, () => 0); // 조합의 배열

  let check = Array.from({ length: n }, () => false); // for 수열 (중복X)
  let arr = Array.from({ length: n }, () => 0); // 순열 저장

  let answer = [];

  function comb(n, r) {
    if (n === r || r === 0) return (mem_arr[n][r] = 1);
    if (mem_arr > 0) return mem_arr[n][r];
    return (mem_arr[n][r] = comb(n - 1, r - 1) + comb(n - 1, r));
  }

  for (let i = 0; i < n; i++) {
    comb_arr[i] = comb(n - 1, i);
  }
  function dfs(lev) {
    if (lev >= n) {
      let sum = 0;
      for (let i = 0; i < n; i++) {
        sum += comb_arr[i] * (i + 1);
      }
      if (sum === end) {
        answer.push(arr.slice());
      }
    } else {
      for (let i = 1; i <= n; i++) {
        if (check[i] === true) continue;
        check[i] = true;
        arr[lev] = i;
        dfs(lev + 1);
        check[i] = false;
      }
    }
  }
  dfs(0);

  return answer;
}

제가 처음에 의도했던 코드의 경우로는,,

일단 순열을 arr에 저장하고 lev=== n 이 될때 구한 순열과 조합의 곱의 합인 sum 을 구하여 비교하는 방식으로 짰습니다.

근데 이 코드를 실행해보니까 arr 이 (1,2,3,4) 로만 나오는데 어디서 잘못됐는지 잘 모르겠습니다!!

 

답변 주시면 정말 감사하겠습니다 😄

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

00님, 자바스크립트 알고리즘 문제풀이 입문 강의를 수강하시고 직접 풀어보신 코드 관련 질문을 주셨군요. 일단 코드에 몇 가지 문제가 있어 보이며, 좀 더 자세히 설명해 드리겠습니다.

  1. 마지막 숫자가 조합의 곱의 합이 되는 이유:
    이 부분은 문제의 정의 및 조건에 따라 결정되는 부분으로, 강의 내용에 따라서 문제 상황이나 로직을 정확히 이해하는 것이 중요합니다. 일반적으로 조합이 특정 수의 합으로 표현되는 이유는 해당 문제에서 규정된 규칙 또는 패턴이 존재하기 때문입니다. 이에 대한 구체적인 설명은 강의 내용을 참고하시는 것이 좋을 것 같네요.

  2. 코드에서 답이 안 나오는 이유:
    주어진 코드를 살펴보았을 때, 조합을 반환하는 함수 comb 내에 조건문의 mem_arr > 0은 잘못된 조건이며 mem_arr[n][r] > 0으로 수정되어야 합니다. 그리고 조합의 배열 comb_arr를 구할 때 comb(n - 1, i) 대신 comb(n, i)로 호출해야 조합을 제대로 계산할 수 있습니다. 이 부분을 수정하여 다시 시도해 보시기 바랍니다.

더불어 코드의 마지막 부분에서, sum을 구하는 로직이 조합과 순열을 곱하는 방식으로 구현되어 있는데, sum의 계산이 올바른지 다시 한번 검토가 필요해 보입니다. 각 순열의 요소에 따른 가중치를 곱하여 sum을 구하는 식이 올바르게 구현되었는지 확인하시면 좋겠습니다.

코드 문제 해결에 도움이 되길 바라며, 다른 궁금증이 있으시면 언제든지 질문 주세요. 화이팅입니다! 😄

00님의 프로필 이미지
00

작성한 질문수

질문하기