알고리즘 문제 해결/BOJ

[백 트래킹] BOJ 15656 N과 M (7)

jmkimmessi 2020. 12. 30. 00:00
반응형

www.acmicpc.net/problem/15656

 

15656번: N과 M (7)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

문제 해결 알고리즘

 

1. N과 M 값을 입력을 받고 주어진 수들을 벡터(v)에 저장한 다음 정렬해주고 dfs()함수를 실행해준다.

 

2. dfs 함수에서 만약 n이 M과 같으면 배열(arr)에 있는 값들을 출력해준다.

   같지 않다면 배열에 벡터(v)에 저장되어 있는 수들을 배열에 각각 넣고 dfs함수에 n+1 값을 파라미터로 넣어준다.

  

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int N, M; 
int arr[9], v[9];

void dfs(int n){

  if(n == M){
    for(int i=0;i<M;i++){
      cout << arr[i] << ' ';
    }
    cout << '\n';
    return;
  }

  for(int j=0;j<N;j++){
    arr[n] = v[j];
    dfs(n+1);
  }
}

int main(){
  cin >> N >> M;

  for(int i=0;i<N;i++){
    cin >> v[i];
  }

  sort(v, v+N);
  
  dfs(0);

}
반응형