https://www.acmicpc.net/workbook/view/2052
N과 M
자연수 N과 M이 주어졌을 때 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 구하시오.
입력
첫 번째 줄 : N M
출력
조건을 만족하는 수열을 출력
중복되는 수열을 여러 번 출력하면 안됨
수열은 공백으로 구분하여 출력
설명
1부터 N까지 자연수 중 중복없이 M개를 고른 수열
해석
(1, 3) (3, 1)이 가능하므로,
순열
코드
const fs = require('fs');
const inputData = fs.readFileSync('/dev/stdin').toString().split(' ');
// const inputData = fs.readFileSync('example.txt').toString().split(' ');
// console.log(input);
var N = parseInt(inputData[0]);
var M = parseInt(inputData[1]);
var array = [];
var sel = [];
var v = [];
var answer = '';
for (var i = 0; i < N; i++) {
array[i] = i + 1;
v[i] = false;
}
for (var i = 0; i < M; i++) {
sel[i] = 0;
}
recursive(0);
function recursive(count) {
if (count == sel.length) {
answer = '';
for (var i = 0; i < sel.length; i++) {
answer += sel[i];
answer += ' ';
}
console.log(answer);
return;
}
for (var i = 0; i < array.length; i++) {
if (v[i] == true) continue;
v[i] = true;
sel[count] = array[i];
recursive(count + 1);
sel[count] = 0;
v[i] = false;
}
}
설명
1부터 N까지 자연수 중 중복 없이 M개를 고른 수열
고른 수열은 오름차순이어야 함
해석
(1, 3) (3, 1)이 불가능하므로,
조합
코드
const fs = require('fs');
const inputData = fs.readFileSync('/dev/stdin').toString().split(' ');
// const inputData = fs.readFileSync('example.txt').toString().split(' ');
var N = parseInt(inputData[0]);
var M = parseInt(inputData[1]);
var array = [];
var sel = [];
// var v = [];
var answer = '';
for (var i = 0; i < N; i++) {
array[i] = i + 1;
// v[i] = false;
}
for (var i = 0; i < M; i++) {
sel[i] = 0;
}
recursive(0, 0);
function recursive(count, index) {
if (count == sel.length) {
answer = '';
for (var i = 0; i < sel.length; i++) {
answer += sel[i];
answer += ' ';
}
console.log(answer);
return;
}
for (var i = index; i < array.length; i++) {
// if (v[i] == true) continue;
// v[i] = true;
sel[count] = array[i];
recursive(count + 1, i + 1);
sel[count] = 0;
// v[i] = false;
}
}
설명
1부터 N까지 자연수 중에서 M개를 고른 수열
같은 수를 여러 번 골라도 됨
해석
(1, 1, 3) (3, 1, 1)이 가능하므로,
중복순열
코드
const fs = require('fs');
const inputData = fs.readFileSync('/dev/stdin').toString().split(' ');
// const inputData = fs.readFileSync('example.txt').toString().split(' ');
// console.log(input);
var N = parseInt(inputData[0]);
var M = parseInt(inputData[1]);
var array = [];
var sel = [];
var v = [];
var answer = '';
for (var i = 0; i < N; i++) {
array[i] = i + 1;
v[i] = false;
}
for (var i = 0; i < M; i++) {
sel[i] = 0;
}
recursive(0);
console.log(answer);
function recursive(count) {
// answer = '';
if (count == sel.length) {
for (var i = 0; i < sel.length; i++) {
answer += sel[i];
answer += ' ';
}
answer += '\n';
return;
}
for (var i = 0; i < array.length; i++) {
// if (v[i] == true) continue;
v[i] = true;
sel[count] = array[i];
recursive(count + 1);
sel[count] = 0;
v[i] = false;
}
}
설명
1부터 N까지 자연수 중에서 M개를 고른 수열
같은 수를 여러 번 골라도 됨
해석
(1, 1, 3) (3, 1, 1)이 불가능하므로,
중복조합
코드
const fs = require('fs');
// const inputData = fs.readFileSync('/dev/stdin').toString().split(' ');
const inputData = fs.readFileSync('example.txt').toString().split(' ');
var N = parseInt(inputData[0]);
var M = parseInt(inputData[1]);
var array = [];
var sel = [];
// var v = [];
var answer = '';
for (var i = 0; i < N; i++) {
array[i] = i + 1;
// v[i] = false;
}
for (var i = 0; i < M; i++) {
sel[i] = 0;
}
recursive(0, 0);
console.log(answer);
function recursive(count, index) {
if (count == sel.length) {
// answer = '';
for (var i = 0; i < sel.length; i++) {
answer += sel[i];
answer += ' ';
}
answer += '\n';
return;
}
for (var i = index; i < array.length; i++) {
// if (v[i] == true) continue;
// v[i] = true;
sel[count] = array[i];
recursive(count + 1, i);
sel[count] = 0;
// v[i] = false;
}
}
해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.
혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!
python source : https://github.com/ssh5212/conding-test-practice
java source : https://github.com/ssh5212/coding-test-java
[BOJ / 백준] 2805 나무 자르기 (S2^ / 이분탐색) - Python (1) | 2024.06.18 |
---|---|
[BOJ / 백준] 20055 컨베이어 벨트 위의 로봇 (G5 / 시뮬레이션) - Python (0) | 2024.06.16 |
[코드트리] 고대 문명 유적 탐사 (G4^ / 시뮬레이션) - Python (0) | 2024.06.15 |
[BOJ / 백준] 11559 Puyo Pyuo (G4 / 시뮬레이션, BFS) - Python (0) | 2024.06.14 |
[BOJ / 백준] 20056 마법사 상어와 파이어볼 (G4^ / 시뮬레이션) - Python (0) | 2024.06.12 |