[ BOJ / C++ ] 15663번 N과 M (9)
이번 문제는 처음 봤을 때는 쉽게 해결할 수 있을 것 같았지만 중복을 피해야 한다는 제약 때문에 조금 까다로웠던 문제였다.
- sort()함수를 이용해 배열을 정렬한다.
- 마지막에 추가한 수와 이번에 추가하는 수가 값이 같다면 중복이 되므로 이때는 출력을 하지 않아야 한다.
- 마지막에 추가한 수를 xdx에 저장하여 새로 저장하는 값과 비교하였다.
Code
#include <iostream>
#include <algorithm>
#define MAX 8
using namespace std;
int n, m;
int arr[MAX], result[MAX];
bool chk[MAX];
void Input(){
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> arr[i];
chk[i]=false;
}
sort(arr, arr + n);
}
void DFS(int cnt) {
if (cnt==m) {
for (int i=0; i<m; i++)
cout<<result[i]<<" ";
cout<<endl;
return;
}
int xdx = 0;
for (int i=0; i<n; i++) {
if (!chk[i]&&arr[i]!=xdx) {
result[cnt]=arr[i];
xdx=result[cnt];
chk[i]=true;
DFS(cnt+1);
chk[i]=false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
DFS(0);
return 0;
}
#include <iostream>
#include <algorithm>
#define MAX 8
using namespace std;
int n, m;
int arr[MAX], result[MAX];
bool chk[MAX];
void Input(){
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> arr[i];
chk[i]=false;
}
sort(arr, arr + n);
}
void DFS(int cnt) {
if (cnt==m) {
for (int i=0; i<m; i++)
cout<<result[i]<<" ";
cout<<endl;
return;
}
int xdx = 0;
for (int i=0; i<n; i++) {
if (!chk[i]&&arr[i]!=xdx) {
result[cnt]=arr[i];
xdx=result[cnt];
chk[i]=true;
DFS(cnt+1);
chk[i]=false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
DFS(0);
return 0;
}
Author And Source
이 문제에 관하여([ BOJ / C++ ] 15663번 N과 M (9)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xx0hn/BOJ-C-15663번-N과-M-9저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)