티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/6603
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int k, arr[13], ans[6];
void dfs(int s, int idx)
{
if(idx == 6)
{
for(int i=0; i<6; i++) cout << ans[i] << " ";
cout << "\n";
return;
}
for(int i=s; i<k; i++)
{
ans[idx] = arr[i];
dfs(i+1, idx+1);
}
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(0);
while(cin >> k)
{
if(k==0) break;
for(int i=0; i<k; i++) cin >> arr[i];
dfs(0, 0);
cout << "\n";
}
return 0;
}
백트래킹을 활용한 문제이다.
시작점과 현재 인덱스를 같이 넘기고, 인덱스가 6이 되는 순간을 체크하여 저장된 배열 값들을 출력해준다.
배열 값 저장 같은 경우 기존에 입력받은 값들을 idx 값에 따라 정답 배열에 저장해준다.
이때 시작점을 주의하여야 한다.
'백준 > 실버' 카테고리의 다른 글
[백준 2485번] 가로수 (C++) (0) | 2025.03.27 |
---|---|
[백준 1735번] 분수 합 (C++) (0) | 2025.03.27 |
[백준 2529번] 부등호 (C++) (0) | 2025.03.10 |
[백준 10971번] 외판원 순회 2 (C++) (0) | 2025.03.08 |
[백준 10974번] 모든 순열 (C++) (0) | 2025.03.07 |