반응형
문제링크:https://www.acmicpc.net/problem/15666
dfs연습문제입니다.
- 같은 수를 여러 번 골라도 된다.
- 고른 수열은 비내림차순이어야 한다
두가지 조건을 만족시켜야 합니다.
중복 수를 제거하고 sort 함수를 통해 오름차순 배열로 정렬시켰습니다.
그 이후 재귀식을 통해서 count값을 올리며 진행했습니다.
void dfs(int cnt) {
if (cnt == m) {
for (int i = 0; i < cnt; i++)
cout << result[i] << ' ';
cout << endl;
return;
}
for (int i = 0; i < arr_index; i++) {
bool jud = true;
for (int j = 0; j < cnt; j++)
if (result[j] > arr[i]) {
jud = false;
break;
}
if (jud == true)
{
result [cnt] = arr[i];
dfs(cnt + 1);
}
}
}
위 처럼 구현하였습니다.
정답코드입니다.
#include <iostream>
#include <algorithm>
using namespace std;
int n = 0, m = 0,arr_index=0,num;
int arr[8] = { 0 };
int result[8];
bool visited[8] = { 0 };
void dfs(int cnt) {
if (cnt == m) {
for (int i = 0; i < cnt; i++)
cout << result[i] << ' ';
cout << endl;
return;
}
for (int i = 0; i < arr_index; i++) {
bool jud = true;
for (int j = 0; j < cnt; j++)
if (result[j] > arr[i]) {
jud = false;
break;
}
if (jud == true)
{
result [cnt] = arr[i];
dfs(cnt + 1);
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
bool jud = true;
cin >> num;
for (int j = 0; j < arr_index; j++) {
if (arr[j] == num) {
jud = false;
break;
}
}
if (jud == true)
arr[arr_index++] = num;
}
sort(arr, arr + arr_index);
dfs(0);
}
반응형
'알고리즘 > DFS' 카테고리의 다른 글
[백준] 1012-유기농 배추(C++) (0) | 2020.03.31 |
---|---|
[백준] 2661-좋은수열(C++) (0) | 2020.03.30 |
[백준] 10026-적록색약(C++) (0) | 2020.03.12 |
[백준] 2668-숫자고르기(C++) (0) | 2020.03.11 |
[백준] 2583-영역구하기(C++) (0) | 2020.03.11 |