
알고리즘 문제 풀이
문제
https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이
DFS를 이용해야하지만 DFS 시작점 이하의 수는 출력하면 안되므로 백트래킹 기법을 이용해야한다
소스 코드
// 헤더파일
#include <iostream>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <cctype>
#include <set>
#include <string.h>
using namespace std;
int N, M;
int arr[9];
bool visited[9];
void DFS(int start, int check) {
if (check == M) {
for (int i = 0; i < M; i++) {
cout << arr[i] << ' ';
}
cout << '\n';
return;
}
for (int i = start; i <= N; i++) {
if (!visited[i]) {
visited[i] = true;
arr[check] = i;
DFS(i + 1, check + 1);
visited[i] = false;
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
DFS(1, 0);
}'Programming Practice > BOJ' 카테고리의 다른 글
| [BOJ] 백준 1932 정수 삼각형 (C++) (0) | 2022.04.24 |
|---|---|
| [BOJ] 백준 2407 조합 (C++) (0) | 2022.04.21 |
| [BOJ] 백준 1149 RGB거리 (C++) (0) | 2022.04.20 |
| [BOJ] 백준 16236 아기상어 (C++) (0) | 2022.04.19 |
| [BOJ] 백준 1029 곱셈 (C++) (0) | 2022.04.19 |