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 |