문제 : https://www.acmicpc.net/problem/15650
[알고리즘풀이]
중복을 체크해줘야 되므로 visited 배열을 활용하고, 오름차순으로 진행해야 되므로, 가장 마지막에 담긴 값을 이용해서 백트레킹을 설계한다.
#include<iostream>
#include<vector>
using namespace std;
bool visited[9];
int m, n;
void bt(int, int);
int main(void) {
cin >> n >> m;
for (int i = 1; i <= n - m + 1; i++) {
visited[i] = true;
bt(1,i);
visited[i] = false;
}
}
void bt(int count, int start) {
if (count == m) {
for (int k = 1; k <= n; k++)
if (visited[k])
cout << k << ' ';
cout << '\n';
return;
}
for (int k = start; k <= n; k++) {
if(visited[k] == false){
visited[k] = true;
bt(count + 1, k);
visited[k] = false;
}
}
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 15652 - N 과 M (4) (0) | 2019.09.08 |
---|---|
[BOJ] 15651 - N 과 M (3) (0) | 2019.09.08 |
[BOJ] 15469 - N 과 M (1) (0) | 2019.09.08 |
[BOJ] 2240 - 자두나무 (0) | 2019.09.04 |
[BOJ] 1937 - 욕심쟁이 판다 (0) | 2019.09.03 |