Post

baekjoon 15650:N과 M (2)

baekjoon 15650 N과 M (2)

15650번 N과 M (2)

접근

백트레킹 문제를 좀 풀어보고 싶어서 골랐다.
백트레킹은 완전 탐색의 한 방식이다. 막히면 돌아간다는 의미이다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>

using namespace std;
void backtracking(int n, int m, int str_idx, vector<int>& arr);
int main(){
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);

  int n, m; cin >> n >> m;
  vector<int> arr;
  backtracking(n, m, 1, arr);
  
  return 0;
}
void backtracking(int n, int m, int str_idx, vector<int>& arr){
  if(arr.size() == m){
    for(int i = 0; i < m; i++){
      cout << arr[i] << ' ';
    }
    cout << '\n';
    return;
  }
  else{
    if(arr.size() + n - str_idx+1 < m){
      return;
    }
  }

  arr.push_back(str_idx);
  backtracking(n, m, str_idx+1, arr); //str_idx포함경우
  arr.pop_back();
  backtracking(n, m, str_idx+1, arr); //str_idx미포함경우
}

배운 점

백트레킹을 해보았다.

This post is licensed under CC BY 4.0 by the author.