문제링크 : https://www.acmicpc.net/problem/15665
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;
int N, M, arr[8], result[8];
void func(int cnt)
{
if(cnt == M)
{
for(int i=0; i<M; i++) cout << result[i] << " ";
cout <<"\n";
return;
}
int tmp = 0;
for(int i=0; i<N; i++)
{
if(tmp == arr[i]) continue; //직전 수 스킵
tmp = result[cnt] = arr[i]; //현재 수 및 순서 저장
func(cnt+1);
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for(int i=0; i<N; i++) cin >> arr[i];
sort(arr, arr+N);
func(0);
return 0;
}
N과 M (10) 번 문제에서 같은 수를 여러번 고를 수 있게 변경된 문제이다.
i같은 수를 여러번 고를 수 없기에 현재 인덱스 다음 값을 넘겨줬던 10번 문제와 달리, 이번 문제는 인덱스를 넘겨줄 필요가 없다.
참고링크 : https://blob-thinking.tistory.com/548
'백준 > 실버' 카테고리의 다른 글
[백준 2012번] 등수 매기기 (C++) (0) | 2024.03.30 |
---|---|
[백준 16435번] 스네이크버드 (C++) (0) | 2024.03.29 |
[백준 5568번] 카드 놓기 (C++) (0) | 2024.03.27 |
[백준 1431번] 시리얼 번호 (C++) (0) | 2024.03.26 |
[백준 15664번] N과 M (10) (C++) (0) | 2024.03.25 |