https://www.acmicpc.net/problem/14888
λ¬Έμ
Nκ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. λ, μμ μ μ¬μ΄μ λΌμλ£μ μ μλ N-1κ°μ μ°μ°μκ° μ£Όμ΄μ§λ€. μ°μ°μλ λ§μ (+), λΊμ (-), κ³±μ (×), λλμ (÷)μΌλ‘λ§ μ΄λ£¨μ΄μ Έ μλ€.
μ°λ¦¬λ μμ μ μ¬μ΄μ μ°μ°μλ₯Ό νλμ© λ£μ΄μ, μμμ νλ λ§λ€ μ μλ€. μ΄λ, μ£Όμ΄μ§ μμ μμλ₯Ό λ°κΎΈλ©΄ μ λλ€.
μλ₯Ό λ€μ΄, 6κ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ 1, 2, 3, 4, 5, 6μ΄κ³ , μ£Όμ΄μ§ μ°μ°μκ° λ§μ (+) 2κ°, λΊμ (-) 1κ°, κ³±μ (×) 1κ°, λλμ (÷) 1κ°μΈ κ²½μ°μλ μ΄ 60κ°μ§μ μμ λ§λ€ μ μλ€. μλ₯Ό λ€μ΄, μλμ κ°μ μμ λ§λ€ μ μλ€.
- 1+2+3-4×5÷6
- 1÷2+3+4-5×6
- 1+2÷3×4-5+6
- 1÷2×3-4+5+6
μμ κ³μ°μ μ°μ°μ μ°μ μμλ₯Ό 무μνκ³ μμμλΆν° μ§νν΄μΌ νλ€. λ, λλμ μ μ μ λλμ μΌλ‘ λͺ«λ§ μ·¨νλ€. μμλ₯Ό μμλ‘ λλ λλ C++14μ κΈ°μ€μ λ°λ₯Έλ€. μ¦, μμλ‘ λ°κΎΌ λ€ λͺ«μ μ·¨νκ³ , κ·Έ λͺ«μ μμλ‘ λ°κΎΌ κ²κ³Ό κ°λ€. μ΄μ λ°λΌμ, μμ μ 4κ°μ κ²°κ³Όλ₯Ό κ³μ°ν΄λ³΄λ©΄ μλμ κ°λ€.
- 1+2+3-4×5÷6 = 1
- 1÷2+3+4-5×6 = 12
- 1+2÷3×4-5+6 = 5
- 1÷2×3-4+5+6 = 7
Nκ°μ μμ N-1κ°μ μ°μ°μκ° μ£Όμ΄μ‘μ λ, λ§λ€ μ μλ μμ κ²°κ³Όκ° μ΅λμΈ κ²κ³Ό μ΅μμΈ κ²μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ κ°μ N(2 ≤ N ≤ 11)κ° μ£Όμ΄μ§λ€. λμ§Έ μ€μλ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. (1 ≤ Ai ≤ 100) μ μ§Έ μ€μλ ν©μ΄ N-1μΈ 4κ°μ μ μκ° μ£Όμ΄μ§λλ°, μ°¨λ‘λλ‘ λ§μ (+)μ κ°μ, λΊμ (-)μ κ°μ, κ³±μ (×)μ κ°μ, λλμ (÷)μ κ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ λ§λ€ μ μλ μμ κ²°κ³Όμ μ΅λκ°μ, λμ§Έ μ€μλ μ΅μκ°μ μΆλ ₯νλ€. μ°μ°μλ₯Ό μ΄λ»κ² λΌμλ£μ΄λ νμ -10μ΅λ³΄λ€ ν¬κ±°λ κ°κ³ , 10μ΅λ³΄λ€ μκ±°λ κ°μ κ²°κ³Όκ° λμ€λ μ λ ₯λ§ μ£Όμ΄μ§λ€. λν, μμμλΆν° κ³μ°νμ λ, μ€κ°μ κ³μ°λλ μμ κ²°κ³Όλ νμ -10μ΅λ³΄λ€ ν¬κ±°λ κ°κ³ , 10μ΅λ³΄λ€ μκ±°λ κ°λ€.
νμ΄
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<int> number;
vector<int> oper(4);
int mmax = -1000000001;
int mmin = 1000000001;
int calculate(int a, int b, int op) {
if(op==0) return a+b;
if(op==1) return a-b;
if(op==2) return a*b;
if(op==3) return a/b;
return -1;
}
void bt(int cur, int idx) {
if(idx == n) {
mmax = max(mmax, cur);
mmin = min(mmin, cur);
return;
}
for(int op=0; op<4; op++) {
if(oper[op]<=0)
continue;
int next = calculate(cur, number[idx], op);
oper[op]--;
bt(next, idx+1);
oper[op]++;
}
}
int main() {
// μ
λ ₯
cin >> n;
number.assign(n,-1);
for(int i=0; i<n; i++) {
cin >> number[i];
}
for(int i=0; i<4; i++) {
cin >> oper[i];
}
// μ°μ°
bt(number[0], 1);
// μΆλ ₯
cout << mmax << "\n" << mmin;
return 0;
}
'ποΈ ICPC Sinchon > Backtracking' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ][C++] λ°±μ€ 1497λ²: κΈ°νμ½μνΈ (0) | 2024.08.17 |
---|---|
[BOJ][C++] λ°±μ€ 1759λ²: μνΈ λ§λ€κΈ° (0) | 2023.11.22 |
[BOJ][C++] λ°±μ€ 15811λ²: 볡면μ°?! (0) | 2023.01.22 |
[BOJ][C++] λ°±μ€ 2661λ²: μ’μμμ΄ (0) | 2023.01.22 |
[BOJ][C++] λ°±μ€ 2580λ²: μ€λμΏ (0) | 2023.01.22 |