6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
이 문제 또한 dfs를 사용한 문제인데..
[백준/C++] 6603번: 로또 (tistory.com)
[백준/C++] 6603번: 로또
1) 이건 test case 갯수를 입력으로 받지 않고 0이 나오면 끝나게 해야했다. 그 부분을 잘 몰랐는데 while문으로 구현하면 된다. 2) 조합을 만드는 문제는 탐색으로 풀면 된다. 1차원배열 탐색을 하면
sanghyu.tistory.com
이 포스팅을 보고 힌트를 얻어 풀었는데
문제의 나의 코드는
#include <vector>
#include <iostream>
using namespace std;
int k;
vector<int> v;
vector<int> a;
void dfs(int start, int depth){
if(depth==6){
for(int i=0; i<6; i++){
cout << a[i] << " ";
}
cout << "\n";
}
for(int i = start; i<k; i++){
a.push_back(v[i]);
dfs(i+1, depth+1);
}
}
int main(){
while(1){
int m;
cin >> k;
if(k==0) break;
for(int i=0; i<k; i++){
cin >> m;
v.push_back(m);
}
dfs(0,0);
cout << "\n";
}
return 0;
}
자꾸 결과가 이렇게 나왔다
계속 생각을 해보니, 나는 vector로 a, v를 선언해놓고 초기화도 시켜주지 않은채 진행시켰던 것
벡터를 모두 배열로 다시 표현해줬다.
#include <iostream>
using namespace std;
int k;
int v[14];
int a[6];
void dfs(int start, int depth){
if(depth==6){
for(int i=0; i<6; i++){
cout << a[i] << " ";
}
cout << "\n";
}
for(int i = start; i<k; i++){
a[depth] = v[i];
dfs(i+1, depth+1);
}
}
int main(){
while(1){
cin >> k;
if(k==0) break;
for(int i=0; i<k; i++){
cin >> v[i];
}
dfs(0,0);
cout << endl;
}
return 0;
}
출력도 잘 나오는데
백준 채점 돌리면 틀렸다고 나옴
(?????)
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 2981번 C++] 검문 (0) | 2023.09.01 |
---|---|
[백준 15650번 C++] N과 M (2) (0) | 2023.09.01 |
[백준 1182번 C++] 부분수열의 합 (0) | 2023.09.01 |
[백준 17103번 C++] 골드바흐 파티션 (0) | 2023.09.01 |
[백준 6588번] 골드바흐의 추측 (0) | 2023.09.01 |