본문 바로가기
Programming/Algorithm

백준 로또

by OKOK 2018. 2. 2.

/*

로또문제풀이 안보고 풀이, dfs 로 완전 탐색해야합니다. 자 보면

1 2 3 4 5 6 7 을받습니다. 받고 나서 순서를 파악해보도록 하겠습니다.


1 2 3 4 5 6

1 2 3 4 5 7

1 2 3 4 6 7

1 2 3 5 6 7

1 2 4 5 6 7

1 3 4 5 6 7


2 3 4 5 6 7


고하는 것 하나랑 제어하는 것 하나 이렇게 입력으로 들어갑니다.

*/


#include <iostream>

using namespace std;


int k;

int numArr[15];

int visit[10];



void dfs(int pos, int depth) {


if (pos == k && depth == 6) {

for (int i = 0; i < k; i++) {

if (visit[i] == 1) {

cout << numArr[i] << " ";

}

}

cout << endl;

}


if (pos == k) return;


visit[pos] = 1;

dfs(pos + 1, depth + 1);

visit[pos] = 0;

dfs(pos + 1, depth);


return;

}


void problemIn() {

for (int i = 0; i < k; i++) {

cin >> numArr[i];

}


dfs(0, 0);

}



int main() {

while (1) {

cin >> k;

if (k == 0) break;

else {

problemIn();

cout << endl;

}

}

return 0;


풀이풀이. 기존의 답을 참고해서 기억해내서 풀었습니다. 여기서 알아야할 것은 dfs 는 처음에 0,0 으로 들어가는것이 보통이고, 다른 것을 넣어도 상관없습니다. 그리고 완전탐색할 수 있음을, 그리고 재귀로 풀어야 하는것을 기억합니다. 나와야하는 return문 그리고 조건을 모두 만족했을 때 출력해야하는 것들을 주의해서 풀이하도록 합니다. 오께이