백트래킹을 공부하며 N과M 시리즈 중 (1) - (8) 까지 풀어보았다.
[N과 M(1)]
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
void func(int k){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=1; i<=n; i++){
if(!visited[i]){
arr[k] = i;
visited[i] = 1;
func(k+1);
visited[i] = 0;
}
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
func(0);
}
[N과 M(2)]
https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
void func(int k,int index){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i= index; i<n; i++){
if(!visited[i]){
arr[k] = i+1;
visited[i] = 1;
func(k+1,i+1);
visited[i] = 0;
}
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
func(0,0);
}
[N과M(3)]
https://www.acmicpc.net/problem/15651
15651번: N과 M (3)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
void func(int k){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=0; i<n; i++){
arr[k] = i+1;
visited[i] = 1;
func(k+1);
visited[i] = 0;
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
func(0);
}
[N과M(4)]
https://www.acmicpc.net/problem/15652
15652번: N과 M (4)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
void func(int k,int index){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=index; i<=n; i++){
arr[k] = i;
visited[i] = 1;
func(k+1,i);
visited[i] = 0;
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
func(0,1);
}
[N과M(5)]
https://www.acmicpc.net/problem/15654
15654번: N과 M (5)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
int input[10];
void func(int k){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=0; i<n; i++){
if(!visited[i]){
visited[i] = 1;
arr[k] = input[i];
func(k+1);
visited[i] =0;
}
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
for(int i= 0; i<n;i++){
cin>>input[i];
}
sort(input, input+n);
func(0);
}
[N과M(6)]
https://www.acmicpc.net/problem/15655
15655번: N과 M (6)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
int input[10];
void func(int k,int index){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=index; i<n; i++){
if(!visited[i]){
visited[i] = 1;
arr[k] = input[i];
func(k+1,i+1);
visited[i] =0;
}
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
for(int i= 0; i<n;i++){
cin>>input[i];
}
sort(input, input+n);
func(0,0);
}
[N과M(7)]
https://www.acmicpc.net/problem/15656
15656번: N과 M (7)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
int input[10];
void func(int k){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=0; i<n; i++){
arr[k] = input[i];
func(k+1);
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
for(int i= 0; i<n;i++){
cin>>input[i];
}
sort(input, input+n);
func(0);
}
[N과M(8)]
https://www.acmicpc.net/problem/15657
15657번: N과 M (8)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n,m;
int arr[10];
bool visited[10];
int input[10];
void func(int k,int index){
if(k==m){
for(int i=0; i<m; i++){
cout<<arr[i]<<" ";
}
cout<<'\n';
return;
}
for(int i=index; i<n; i++){
arr[k] = input[i];
func(k+1,i);
}
}
int main(void) {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin>>n>>m;
for(int i= 0; i<n;i++){
cin>>input[i];
}
sort(input, input+n);
func(0,0);
}
'Algorithm > BOJ' 카테고리의 다른 글
[c++] 백준 10814 나이순 정렬 (0) | 2021.01.03 |
---|---|
[c++] 백준 6603 로또 + 풀이추가(2021.03.04) (0) | 2020.12.31 |
[c++] 백준 7569 토마토 (3차원) (0) | 2020.12.28 |
[c++] 백준 7576 토마토 (0) | 2020.12.28 |
[c++] 백준 2667 단지번호 붙이기 (0) | 2020.12.27 |