문제
문제 바로가기> BOJ 15663번: N과 M (9)
풀이
같은 위치에 같은 수가 오게되면, 중복 수열이 되므로, 이를 방지하기 위해 `prev` 를 이용해서 같은 자리에 같은 수가 오지 못하도록 해주었다!
#include<iostream>
#include<algorithm>
#define MAX 10
using namespace std;
int N, M;
bool isused[MAX];
int num[MAX], ans[MAX];
void input() {
cin >> N >> M;
for (int i = 0; i < N; i++) cin >> num[i];
sort(num, num + N);
}
void solution(int cnt) {
if (cnt == M) {
for (int i = 0; i < M; i++) cout << ans[i] << " ";
cout << "\n";
return;
}
int prev = -1; // 중복 수열 방지
for (int i = 0; i < N; i++) {
if(isused[i] || num[i] == prev) continue;
isused[i] = true;
ans[cnt] = num[i];
prev = num[i];
solution(cnt + 1);
isused[i] = false;
}
}
int main() {
input();
solution(0);
}
'문제 풀이 > 백준' 카테고리의 다른 글
BOJ 17406번: 배열 돌리기 4 (0) | 2023.01.19 |
---|---|
BOJ 2206번: 벽 부수고 이동하기 (0) | 2023.01.18 |
BOJ 2573번: 빙산 (0) | 2022.12.31 |
BOJ 11057번: 오르막 수 (0) | 2022.12.30 |
BOJ 5014번: 스타트링크 (1) | 2022.12.28 |