문제 풀이 : https://www.acmicpc.net/problem/15654
15654번: N과 M (5)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
문제 풀이
백트래킹을 사용하여 풀이하였다.
N과 M (1)과 따로 입력값을 정렬해야 한다는 점만 제외하면 거의 동일한 문제이다.
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
int arr[10]; // 입력값들을 저장하는 배열
int result[10]; // 출력 순서를 저장할 배열
int isUsed[10];
void nNm(int idx){
if(idx == m){ // base condition
for(int i = 0; i < m; i++){
cout << result[i] << " ";
}
cout << "\n";
return;
}
for(int i = 0; i < n; i++){
if(!isUsed[i]){ // 사용하지 않은 수면
result[idx] = arr[i]; // 배열에 삽입하고
isUsed[i] = 1; // 사용되었다고 표시
nNm(idx+1); // 백트래킹
isUsed[i] = 0; // 사용 완료
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 0; i < n; ++i){
int tmp;
cin >> tmp;
arr[i] = tmp;
}
sort(arr, arr+n); // 사전 순으로 정렬
nNm(0);
}
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(C++) 백준 15656번 - N과 M (7) (0) | 2023.04.09 |
---|---|
(C++) 백준 15655번 - N과 M (6) (1) | 2023.04.09 |
(C++) 백준 15652번 - N과 M (4) (0) | 2023.04.09 |
(C++) 백준 15651번 - N과 M (3) (0) | 2023.04.09 |
(C++) 백준 15650번 - N과 M (2) (0) | 2023.04.09 |