반응형
#include <iostream>
using namespace std;
int arr[8];
int visited[8];
int prevarr[8];
int printarr[8];
void sort_up(int arr[8], int num) // sort(arr, arr+n) algorithm
{
int tmp;
for (int i = 0; i < num - 1; i++)
{
for (int j = i + 1; j < num; j++)
{
if (arr[i] > arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
//cout << arr[i] << arr[j] << " ";
}
}
}
}
void dfs(int lev, int n, int m)
{
if (lev == m)
{
for (int i = 0; i < m; i++)
{
cout << printarr[i] << " ";
}
cout << "\n";
return ; // return 안 하면 에러 난다!!!!!!!!
}
int jun;
jun = 0;
for (int i = 0; i < n; i++)
{
if (visited[i] == 0 && jun != arr[i] ) // && printarr[lev] != arr[i]
{
visited[i] = 1;
jun = arr[i];
printarr[lev] = arr[i];
dfs(lev + 1, n, m);
visited[i] = 0;
}
}
}
int main(void)
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
sort_up(arr, n);
dfs(0, n, m);
// for (int i = 0; i < n; i++)
// {
// cout << arr[i];
// }
}
/*
test1
3 3
1 1 2
-> 3줄
1 1 2
1 2 1
2 1 1
*/
백준
n 과 m 시리즈 중 갑자기 달라져서 놀람
1 7 9 9 가 주어졌을 때
9 1
9 7
9 9
뒤에 9 1 9 7 9 9 가 또 반복되지 않도록
for (int i = 0; i < n; i++)
{
if (visited[i] == 0 && jun != arr[i] )
visited[i] = 1;
jun = arr[i];
printarr[lev] = arr[i];
dfs(lev + 1, n, m);
visited[i] = 0;
}
}
여기를 다르게 해줬다.jun 을 for 문을 기점으로 계속 초기화하면서 바로 직전 jun이랑 같은지 확인했다.
반응형
'C언어 > 문제풀다 하나씩' 카테고리의 다른 글
다이나믹 프로그래밍 문제 백준 2579 계단 오르기 문제 d[i][1] d[i][2] (0) | 2021.01.21 |
---|---|
백준 2309번 일곱난쟁이 || 코드업 codeup 3008 일곱 난쟁이 (0) | 2021.01.20 |
Nqueen문제 (백준 9663 N-Queen & 코드업 3520 체커도전 문제) (0) | 2021.01.19 |
Codeup 코드업 2641 숏다리의 계단 오르기 small (0) | 2021.01.18 |
1182 백준 부분집합의 합 (0) | 2021.01.16 |
디폴트 생성자 Queue() : {} (0) | 2020.08.12 |
boj 백준 9012 스택 괄호 VPS 문제 (0) | 2020.08.08 |
금지어 없애고 대체하기 find insert erase 함수 사용 (0) | 2020.06.26 |