52.중복순열 구하기 - DFS

Updated:


🔍 문제

1부터 N까지 번호가 적힌 구슬이 있습니다.

이 중 중복을 허락하여 M번을 뽑아 일렬로 나열하는 방법을 모두 출력합니다

🔹 입력설명

첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.

🔹 출력 설명

첫 번째 줄에 결과를 출력합니다. 맨 마지막 총 경우의 수를 출력합니다.

출력순서는 사전순으로 오름차순으로 출력합니다

🔹 입력예제 1

3 2

🔹 출력 예제 1

1 1

1 2

1 3

2 1

2 2

2 3

3 1

3 2

3 3

9


📌 풀이

image

image

<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function solution(n, m) {
      let answer = [];
      let tmp = Array.from ({length:m}, () => 0); // 0으로 초기화 된 빈 arr 생성
      function DFS(l) {
        if(l === m) {
          answer.push(tmp.slice()); // 깊은 복사로 slice() 사용해서 tmp push
        }
        else {
          for(let i = 1; i <= n; i++) {
            tmp[l] = i
            DFS(l + 1)
          }
        }
      }
      DFS(0);
      return answer;
    }

    console.log(solution(4, 3));
  </script>
</body>

Leave a comment