2025. 1. 15. 15:00, 코딩테스트
https://www.acmicpc.net/problem/15654
1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열의 값을 2번째로 주어진 배열의 인덱스 값으로 사용하면 이 문제는 간단하게 풀린다
한번 사용한 숫자는 다시 사용하면 안되기 때문에 isused라는 숫자 사용 여부를
포함한 bool 배열을 추가해 for 문 재귀를 돌기 전에 미리 확인했다
소스코드
#include <bits/stdc++.h>
using namespace std;
int N,M;
int input[8];
int arr[8];
bool isused[8];
void recur(int cur)
{
if(cur == M)
{
for(int i = 0; i < M; i++)
{
cout << input[arr[i]-1] << " ";
}
cout << "\n";
return;
}
for(int i = 1; i <= N; i++)
{
if(isused[i])
{
continue;
}
isused[i] = true;
arr[cur] = i;
recur(cur+1);
isused[i] = false;
}
}
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
cin >> N >> M;
for(int i = 0; i < N; i++)
{
cin >> input[i];
}
sort(input,input+N);
recur(0);
return 0;
}
'코딩테스트' 카테고리의 다른 글
백준 [실버3] 15655 N과 M (6) (0) | 2025.01.15 |
---|---|
백준 [실버3] 15652 N과 M (4) (0) | 2025.01.15 |
백준 [실버3] 15651 N과 M (3) (0) | 2025.01.14 |
백준 [실버3] 15650 N과 M (2) (0) | 2025.01.14 |
백준 [실버3] 15649 N과 M (1) (0) | 2025.01.14 |
Comments