‡ CODING TEST STUDY ‡/º 백준

[백준 6603번 C++] 로또

Trudy | 송연 2023. 9. 1. 17:22

6603번: 로또 (acmicpc.net)

 

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;
}

출력도 잘 나오는데 

백준 채점 돌리면 틀렸다고 나옴

 

(?????)