본문 바로가기
Programming/Algorithm

백준 조합 일곱난쟁이

by OKOK 2018. 2. 2.

오께이 일단 행렬은 bfs 로 푼다고 생각하고, 일곱난쟁이처럼 모든 탐색을 해야하면, 조합을 생각하면 됩니다. 이것이 응용문제 인지, 어떤 문제인지 파악하는 것이 중요합니다. 오께이. 오께이. 이 알고리즘에 대한 것은 꼭 알고 있도록 합니다. 


#include <iostream>

#include <algorithm>

using namespace std;

#define FRONT 9

#define BACK 7


int numArr[9];

int visit[9];

int sum;


void problemIn() {

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

cin >> numArr[i];

}


sort(numArr, numArr + 9);

}


void dfs(int pos, int depth) {

if (pos == FRONT && depth == BACK) {

sum = 0;

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

if (visit[i] == 1) {

sum += numArr[i];

}

}


if (sum == 100) {

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

if (visit[i] == 1) {

cout << numArr[i] << endl;

}

}

}

}


if (pos == FRONT) return;

visit[pos] = 1;

dfs(pos + 1, depth + 1);

visit[pos] = 0;

dfs(pos + 1, depth);

return ;

}


int main() {

problemIn();

dfs(0, 0);

return 0;