문제 : 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

+ Recent posts