[ BOJ / C++ ] 15663번 N과 M (9)

황승환·2021년 7월 18일
0

C++

목록 보기
11/65

이번 문제는 처음 봤을 때는 쉽게 해결할 수 있을 것 같았지만 중복을 피해야 한다는 제약 때문에 조금 까다로웠던 문제였다.

  • 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;
}

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글