문제 링크
https://www.acmicpc.net/problem/10974
풀이
const N = +require("fs").readFileSync("/dev/stdin").toString().trim();
let answer = [];
function f(nums, permutation) {
if (nums === "") answer.push(permutation.split("").join(" "));
else {
for (let i=0; i<nums.length; i++) {
f(nums.slice(0, i) + nums.slice(i+1), permutation+nums[i]);
}
}
}
let nums = "";
for (let i=1; i<=N; i++) nums += i;
f(nums, "");
console.log(answer.join("\n"));
함수 f의 매개변수로 nums에는 1부터 N까지 숫자가 나열된 문자열, permutation에는 빈 문자열을 받는다.
그리고 나서 반복문으로 nums를 순회하면서 하나씩 사용하여 permutation을 채우고, nums에서는 해당 숫자를 제거하고 난 후 재귀호출하여 이 과정을 반복한다.
nums가 비어 있게 되면 모든 숫자를 한 번씩 활용하여 permutation을 만든 것이므로, 이 때의 수열을 answer에 저장한다.
최종적으로 answer에 있는 순열들을 출력한다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 1004] 어린 왕자 with Node.js (0) | 2021.05.29 |
---|---|
[백준 11053] 가장 긴 증가하는 부분 수열 with Python (0) | 2021.05.29 |
[백준 1012] 유기농 배추 with Python (0) | 2021.05.25 |
[백준 2003] 수들의 합 2 with Node.js (0) | 2021.05.24 |
[백준 11047] 동전 0 with Python (0) | 2021.05.24 |