중복순열 구하기

원동휘·2022년 12월 26일
0

NOTE - 코테

목록 보기
37/42

문제

1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열 하는 방법을 모두 출력합니다.
▣ 입력설명
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
▣ 출력설명
첫 번째 줄에 결과를 출력합니다. 맨 마지막 총 경우의 수를 출력합니다. 출력순서는 사전순으로 오름차순으로 출력합니다.
▣ 입력예제 1 32
▣ 출력예제 1 11
12
13
21 22 23 31 32 33

풀이

// 중복순열 구하기 for문 버전 -> m만큼의 반복을 직접계속 정의해줘야함
function solutionFor(n, m) {
  let answer = [];
  for (let i = 1; i <= n; i++) {
    for (let j = i; j <= n; j++) {
      console.log(i, j);
    }
  }
  return answer;
}

// console.log(solutionFor(3, 2));

// 중복순열 구하기 재귀 버전 -> m만큼의 반복을 자동으로 찾아감
function solution(n, m) {
  let answer = [];
  let tmp = Array.from({ length: m }, () => 0);
  function DFS(L) {
    if (L === m) {
      // 얕은복사 실행
      const copyTemp = tmp.slice();
      answer.push(copyTemp);
    } else {
      for (let i = 1; i <= n; i++) {
        tmp[L] = i;
        DFS(L + 1);
      }
    }
  }
  DFS(0);
  return answer;
}

console.log(solution(3, 2));
profile
Front-End Developer #Nextjs #React #Typescript

0개의 댓글