문제 링크
https://www.acmicpc.net/problem/15657
풀이
const solve = (N, M, arr) => {
const permutation = [];
const output = [];
const recursion = () => {
if (permutation.length === M) {
output.push(permutation.join(' '));
} else {
for (const i of arr) {
if (permutation[permutation.length-1] > i) continue;
permutation.push(i);
recursion();
permutation.pop(i);
}
}
};
recursion();
console.log(output.join('\n'));
};
const [ N, M, ...arr ] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(v => +v);
arr.sort((a, b) => a - b);
solve(N, M, arr);
먼저 주어진 수들을 오름차순으로 정렬한다.
permutation의 마지막 수보다 작거나 같은 수를 선택한다.
하나의 수를 선택하면 재귀적으로 다시 순회하면서 permutation의 길이가 M이 될 때까지 계속 수를 선택하여 permutation에 push한다.
선택된 수들이 M개가 되면 더 이상 수를 선택하지 않고 output에 지금까지 선택된 수들을 문자열로 저장한다.
재귀호출에서 빠져나오면서 재귀호출 직전에 선택되었던 수를 pop한다.
recursion()이 끝나면 지금까지 output에 저장한 수열을 출력한다.
이렇게 하면 M 개의 수로 이루어진 중복을 포함하는 비내림차순 수열을 오름차순으로 출력할 수 있다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 10844] 쉬운 계단 수 with Python (0) | 2021.09.08 |
---|---|
[백준 16928] 뱀과 사다리 게임 with Node.js (0) | 2021.09.08 |
[백준 11286] 절댓값 힙 with Python (0) | 2021.09.06 |
[백준 1389] 케빈 베이컨의 6단계 법칙 with Node.js (0) | 2021.09.03 |
[백준 9375] 패션왕 신해빈 with Node.js (0) | 2021.08.31 |