🖥️ CS/Baekjoon Algorithms

#15650번 N과M(2) (c++)

한국의 메타몽 2020. 3. 16. 00:41
#include <iostream>
#define MAX 9
int arr[MAX];
bool check[MAX];
using namespace std;

void BackTracking(int Count, int N, int M, int Start){
    if(Count==M){
        for(int i=0; i<M; i++)
            cout << arr[i] << " ";
        cout << "\n";
        return;
    }
    for(int i=Start; i<=N; i++){
        if(check[i]==false){
            check[i] = true;
            arr[Count] = i;
            BackTracking(Count+1,N,M,i+1);
            check[i] = false;
        }
        else if(check[i]==true) continue;
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int count = 0;
    int n,m = 0;
    int start = 1;
    cin >> n >> m;
    BackTracking(count,n,m,start);
    
    return 0;
}

별 문제 아니였으나, 꽤나 시간을 잡아먹었던 문제. 

다름이 아닌 마지막에 딱 한가지 실수를 저질렀기 때문이었다.

 

18번째 줄에 BackTracking(Count+1, N, M, i+1)을 오답에서는 BackTracking(Count+1, N, M, Start+1)로 적어버렸다. 

Start+1로 적을 경우, 답변은 하단과 같이 나온다

 

1 2

1 3

1 4

2 3

2 4

3 2

3 4

4 2

4 3 

 

Start + 1이 답이 안되는 이유는 어렴풋이 알겠으나,

왜 상단과 같은 답이 출력되는건지는 제대로 이해하고 넘어갈 필요가 있어보인다. 

 

 

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#2580번 스도쿠 (c++)  (0) 2020.04.20
#9663번 N-Queen (C++)  (0) 2020.03.22
#15649번 N과M(1) (c++)  (0) 2020.03.15
#10997번 별 찍기 - 21 (c++)  (0) 2020.03.15
#2446번 별 찍기 - 9 (c++)  (0) 2020.03.15