leesangwon0114

I am Research Engineer. Currently working in KT.

C++Algorithm 7. 브루트포스 - N과 M

05 Jan 2019 » Algorithm, c++

codeplus 백준 강사 강의 내용기반으로 정리한 내용입니다.(비공개 포스트)


N과 M

재귀함수 연습해 볼 수 있는 문제들

N과 M(1) 문제

N과 M(1) 문제

#include <iostream>
#include <vector>
using namespace std;

class permutation {
  vector<bool> check;
  vector<int> result;
public:
  void solve(int n, int m, int index) {
    if (index == m) {
      for (int k = 0; k < m; ++k) {
        printf("%d ", result[k]);
      }
      printf("\n");
      return;
    }
    if (index > m) return;
    for (int i = 1; i <= n; ++i) {
      if (check[i]) continue;
      check[i] = true;
      result[index] = i;
      solve(n, m, index + 1);
      check[i] = false;
    }
  }
  void operator()(int n, int m) {
    check.assign(n + 1, 0);
    result.assign(n + 1, 0);
    solve(n, m, 0);
  }
};

int main() {
  int N = 0;
  int M = 0;
  scanf("%d %d", &N, &M);

  permutation p;
  p(N, M);
  return 0;
}

N과 M(2) 문제

N과 M(2) 문제

#include <iostream>
#include <vector>
using namespace std;

class permutation {
  vector<bool> check;
  vector<int> result;
public:
  void solve(int n, int m, int index) {
    if (index == m) {
      for (int k = 0; k < m; ++k) {
        printf("%d ", result[k]);
      }
      printf("\n");
      return;
    }
    if (index > m) return;
    for (int i = 1; i <= n; ++i) {
      if (check[i]) continue;
      check[i] = true;
      result[index] = i;
      solve(n, m, index + 1);
      check[i] = false;
    }
  }
  void operator()(int n, int m) {
    check.assign(n + 1, 0);
    result.assign(n + 1, 0);
    solve(n, m, 0);
  }
};

int main() {
  int N = 0;
  int M = 0;
  scanf("%d %d", &N, &M);

  permutation p;
  p(N, M);
  return 0;
}