54.순열 구하기 - 순열

Updated:


🔍 문제

10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합니다.

🔹 입력설명

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

두 번째 줄에 N개의 자연수가 오름차순으로 주어집니다

🔹 출력 설명

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

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

🔹 입력예제 1

3 2

3 6 9

🔹 출력 예제 1

3 6

3 9

6 3

6 9

9 3

9 6

6


📌 풀이

image

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

<body>
  <script>
    function solution(m, arr) {
      let answer = [];
      n = arr.length;
      let ch = Array.from({
        length: n
      }, () => 0);
      let tmp = Array.from({
        length: m
      }, () => 0);

      function DFS(l) {
        if (l === m) {
          answer.push(tmp.slice()); // answer 에 깊은 복사 
        } else {
          for (let i = 0; i < n; i++) {
            if (ch[i] === 0) { // 순열의 전형적인 구조임 거의 외우다 시피 읽혀야 함. ch 에 0으로 비어있을 경우
              ch[i] = 1; // 1로 바꿔주고
              tmp[l] = arr[i] // tmp arr 에다가 arr 의 value 값을 넣어줌
              DFS(l + 1); // 1단계 level 증가
              ch[i] = 0; // 다시 check arr 0으로 초기화시킴
            }
          }
        }
      }
      DFS(0);
      return answer;
    }

    let arr = [3, 6, 9];
    console.log(solution(2, arr));
  </script>
</body>

Leave a comment