문제 링크
https://www.acmicpc.net/problem/15657
15657번: N과 M (8)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
풀이
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 |