문제
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
복사