오께이 일단 행렬은 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; } |