React

10974 모든 순열

문제

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다.

출력

첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다.

예제 입력 1

3
Plain Text
복사

예제 출력 1

1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
Plain Text
복사

My solution

순열 구하는 함수는 DFS로 많이 구현해봐서 생략.
visited라는 배열로 어떤 숫자를 사용하고 있는지 체크해서 중복된 숫자를 포함하지 않는 순열을 만들도록 한다.

Code

const solution = function (i) { const n = i.toString().trim(); let result = ''; const visit = [...Array(10)].fill(0); const perm = []; const permutations = () => { if (perm.length === +n) { result += perm.join(' ') + '\n'; return; } for (let i = 1; i <= +n; i++) { if (!visit[i]) { visit[i] = true; perm.push(i); permutations(); perm.pop(); visit[i] = false; } } }; permutations(); console.log(result.substring(0, result.length - 1)); return result.substring(0, result.length - 1); }; test('TC1', () => { expect(solution(`3`)).toStrictEqual(`1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1`); });
JavaScript
복사