[λ°±μ€] 2309 μΌκ³± λμμ΄ backtracking
λ¬Έμ :
2309λ²: μΌκ³± λμμ΄
μν κ°μ μ€μ κ±Έμ³ λμμ΄λ€μ ν€κ° μ£Όμ΄μ§λ€. μ£Όμ΄μ§λ ν€λ 100μ λμ§ μλ μμ°μμ΄λ©°, μν λμμ΄μ ν€λ λͺ¨λ λ€λ₯΄λ©°, κ°λ₯ν μ λ΅μ΄ μ¬λ¬ κ°μ§μΈ κ²½μ°μλ μ무거λ μΆλ ₯νλ€.
www.acmicpc.net
λΆμ :
λΈλ‘ μ¦μμμλ μ΄λ €μ λ€.. μμΌλ‘ λΈλ£¨νΈ ν¬μ€, λ°±νΈλνΉμͺ½μ μ’ λ 곡λΆν΄ 보μμΌκ² λ€.
μ’ λ§λΆμμ 보μλ μμ΄λμ΄λ₯Ό κ°μ§κ³ λ¬Έμ μ κ·Όμ νμλ€.
κ° λμμ΄λ€μ 100μ ν¬ν¨νλλ° μνκ±°λ μ μνκ±°λ λμ€ νλμ΄λ€. κ·Έλ¬λ―λ‘ λͺ¨λ λμμ΄λ€μ νμνλλ° return λ¬Έμ λ§λ μ¬κ·κ° λλκ² λλ©΄ visitλ₯Ό falseλ‘ ν΄ μνμ§ μκ²λ λ§λ€κ³ λ€λ₯Έ μμλ€μ νμνλ κ²μ΄λ€.
μ΄λ κ² νμ¬ μνλ μμλ€λ§μ μ λ ¬ν΄ μΆλ ₯νλ€.
C++ μ½λ :
//
// 2309_dwarf7.cpp
// SOMAπ©π»π»
//
// Created by JoSoJeong on 2021/04/06.
//
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
vector<int>arr;
vector<int>re_arr;
int visit[100];
int cnt = 0;
void brute_dwarf7(int score, int cnt){
if (score == 100 and cnt == 7){
sort(re_arr.begin(), re_arr.end());
for(int i = 0; i < 7; i++){
cout << re_arr.at(i) << "\n";
}
exit(0);
}
if (cnt > 7 || score > 100){
return;
}
for(int i= 0; i <9; i++){
if(visit[arr[i]] == false){
visit[arr[i]] = true;
re_arr.push_back(arr[i]);
brute_dwarf7(score + arr[i], cnt + 1);
visit[arr[i]] = false;
re_arr.pop_back();
}
}
return;
}
int main(){
memset(visit, false, sizeof(visit));
for(int i =0; i < 9; i++){
int temp;
cin >> temp;
arr.push_back(temp);
}
brute_dwarf7(0, 0);
return 0;
}