문제링크 : 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;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>
int N, M;
int arr[7];
int visited[7];
void Backtracking(int n)
{
if(n == M)
{
for(int i = 0; i<M; i++)
{
cout << arr[visited[i]] << " ";
}
cout <<'\n';
return;
}
for(int i=0; i<N; i++)
{
visited[n] = i;
Backtracking(n+1);
}
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
for(int i=0; i<N; i++)
{
cin >> arr[i];
}
sort(arr, arr+N);
Backtracking(0);
return 0;
}
백트래킹 문제이다.
i = 0 일 때
visited[0]= 0, visited[1]=0, visited[2]=0, visited[3]=0
-> arr[0], a[0] 출력
맨처음 백트래킹을 호출했을 때로 돌아감 -> visited[1] = 1로 바뀜
visited[1]=1, visited[2]=1, visited[3] =1
-> arr[0], arr[1] 출력
맨처음 백트래킹을 호출했을 때로 돌아감 -> visited[1] = 2로 바뀜
visited[1]=2, visited[2]=2, visited[3] =2
-> arr[0], arr[2] 출력
맨처음 백트래킹을 호출했을 때로 돌아감 -> visited[1] = 3로 바뀜
visited[1]=3, visited[2]=3, visited[3] =3
-> arr[0], arr[3] 출력
위의 과정 반복
'백준 > 실버' 카테고리의 다른 글
[백준 14496번] 그대, 그머가 되어 (C++) (0) | 2023.03.22 |
---|---|
[백준 10451번] 순열 사이클 (C++) (0) | 2023.03.21 |
[백준 4883번] 삼각 그래프 (C++) (0) | 2023.03.18 |
[백준 2824번] 최대공약수 (C++) (0) | 2023.03.17 |
[백준 19637번] IF문 좀 대신 써줘 (0) | 2023.03.14 |