728x90
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
접근 방법
예전에 풀어봤던 백트래킹이 가물가물해져서 다시 N과 M 시리즈를 풀어보도록 해야겠다.
브루트포스에서 처음부터 시작하는 것 대신, 이전 단계로 복귀하여 행하는 것이다.
코드를 보면 쉽게 이해가 가능하다.
https://www.youtube.com/watch?v=Enz2csssTCs
코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <string>
#include <cmath>
#define MAX 9
using namespace std;
int n, m;
int v[MAX];
bool used[MAX];
void print() {
for (int i = 0; i < m; i++) {
cout << v[i] << ' ';
}
cout << '\n';
}
// k : 현재 갯수
void backTracking(int k) {
if (k == m) {
// 출력
print();
return;
}
for (int i = 1; i <= n; i++) {
if (!used[i]) {
v[k] = i;
used[i] = true;
backTracking(k + 1);
used[i] = false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
backTracking(0);
}
728x90
'📊알고리즘 > BOJ' 카테고리의 다른 글
[그리디 #21] BOJ 7570 - 줄 세우기 (0) | 2024.02.27 |
---|---|
[그리디 #20] BOJ 2212 - 센서 (0) | 2024.02.25 |
[그리디 #19] BOJ 2812 - 크게 만들기 (1) | 2024.02.23 |
[그리디 #18] BOJ 11000 - 강의실 배정 (0) | 2024.02.22 |
[그리디 #17] BOJ 21314 - 민겸 수 (0) | 2024.02.22 |