[BOJ] μ°μ°μ λΌμλ£κΈ°(14888)
[λ°±μ€(BOJ)] ν΄μ§ν΄μ§(1326) C++
λ¬Έμ : BOJ_14888λ² μ°μ°μ λΌμλ£κΈ°
λ¬Έμ μ€λͺ
μμ νμ, dfs
1~NκΉμ§ μ μ¬μ΄μ¬μ΄μ νμκ° μ ν΄μ Έμλ μ°μ°μλ₯Ό λΌμ λ£μ λ, μ΅λκ°κ³Ό μ΅μκ°μ μΆλ ₯νλ λ¬Έμ μ λλ€.
Solution
μ΄ λ¬Έμ λ μ΅λκ°κ³Ό μ΅μκ°μ λͺ¨λ ꡬν΄μΌ λκΈ° λλ¬Έμ μ°μ°μλ₯Ό μ¬μ©ν μ μλ λͺ¨λ κ²½μ°μ μλ₯Ό νμΈνλ μμ νμμ μ΄μ©ν΄μΌ νλλ°,
μκ° λ³΅μ‘λκ° μ΄κ³Όλμ§ μκ² μ νλ κ°μ₯ ν° κ²½μ°μ μλ₯Ό μκ°ν΄λ³΄μμΌ ν©λλ€.
μ°μ°μμ νμκ° μλ§κ² μ ν΄μ Έμμ§λ§, κ°μ₯ ν° μκ° λ³΅μ‘λλ₯Ό κ³ λ €νκΈ° μν΄μ μ°μ°μλ₯Ό μ ν μμ΄ μΈ μ μλ€κ³ κ°μ νλ€λ©΄,
μμ κ°μ Nμ μ΅λκ° 11μμΌλ‘, μ°μ°μκ° λ€μ΄κ° μ μλ μλ¦¬κ° 10 μ리μ΄κ³ , 10μ 리λ§λ€ 4κ°μ μ°μ°μκ° λ€μ΄κ° μ μκΈ° λλ¬Έμ,
κ°μ₯ ν° μκ° λ³΅μ‘λλ₯Ό μκ°ν΄λ³Έλ€κ³ ν΄λ, 4^10= 1,048,576 μΈ 100λ§ μ λμ μμμΌλ‘ μ¬κ· ν¨μλ₯Ό μ΄μ©ν μμ νμμ μ΄λ ΅μ§ μκ² ν΄λΌ μ μμ΅λλ€.
Description
- 1~NκΉμ§μ μ μ¬μ΄μ¬μ΄λ§λ€ λͺ¨λ κ²½μ°μ μλ₯Ό νμΈνλ μ¬κ· ν¨μ μμ€λ₯Ό λ§λλ κ² μ΄ λ¬Έμ μ ν΄κ²°λ²
- void dfs(int res, int conut) νμμΌλ‘ λ§λ€μ΄ μ¬κ·λ‘ ν¨μκ° λ€μ΄κ° λ λ§λ€ κ²°κ³Όκ°κ³Ό μΉ΄μ΄νΈκ°μ 체ν¬
- λ¬Έμ μμ μ£Όμ΄μ§ μ΅λκ°μ min_resλ‘ μ΄κΈ°ν, μ΅μκ°μ max_resλ‘ μ΄κΈ°ννκ³ μμ
#include <iostream>
using namespace std;
int roof, arr[12], sub[5];
void dfs(int res, int count);
int max_res = -1000000000, min_res= 1000000000; // λ¬Έμ μμ μ€ κ°μ₯ ν° μλ₯Ό min_resμ, κ°μ₯ μμ μλ₯Ό max_resμ 미리 μ μΈ
int main(void) {
cin >> roof;
for (int i = 0; i < roof; i++) {
cin >> arr[i];
}
for (int i = 0; i < 4; i++) {
cin >> sub[i]; // subλ°°μ΄μ 1λ² λ°°μ΄ μμλΆν° μ£Όμ΄μ§ μ°μ°μμ κ°―μλ₯Ό λ£μ΄μ€λ€.
}
dfs(arr[0], 0);
printf("%d\n%d", max_res, min_res);
return 0;
}
void dfs(int res, int count) {
if (count == roof - 1) { // 1~NκΉμ§μ μ λΌλ©΄, μ°μ°μμ μλ N-1μμΌλ‘ roof-1
if (res < min_res) min_res = res;
if (res > max_res) max_res = res;
return;
}
// μ¬κΈ°μλΆν° λ€ κ°μ§μ μ°μ°μμ λν λͺ¨λ μ¬κ·ν¨μλ₯Ό μ€ννλ€.
if (sub[0] > 0) { // sub[i] > 0 μ μ°μ°μλ₯Ό μ¬μ©ν μ μλ 쑰건
sub[0]--;
dfs(res + arr[count + 1], count + 1);
sub[0]++;
}
if (sub[1] > 0) {
sub[1]--;
dfs(res - arr[count + 1], count + 1);
sub[1]++;
}
if (sub[2] > 0) {
sub[2]--;
dfs(res * arr[count + 1], count + 1);
sub[2]++;
}
if (sub[3] > 0) {
sub[3]--;
dfs(res / arr[count + 1], count + 1);
sub[3]++;
}
}