๐ค๋ฌธ์ ์ดํด
์ค๋ณต์ด ์กด์ฌํ๊ณ , ์์์ ์๊ด์๊ฒ ๋์ดํ๋ ์ฐ์ฐ์ ์์ด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ๊ณ์ฐํ ๊ฐ์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
๋ธ๋ฃจํธ ํฌ์ค, ์ฆ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์๋ณด๊ณ ๊ณ์ฐํด ๋น๊ตํด๋ด์ผ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ฐพ์ ์ ์๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํธ๋ฆฌ ๋ชจ์์ผ๋ก ๋ํ๋ด๋ณด๋ฉด n๋ฒ์งธ ์ฐ์ฐ ๋ค์์ ์ฌ ์ ์๋ ์ฐ์ฐ๋ค์ n๋ฒ์งธ ์ฐ์ฐ์ด๋ผ๋ ๊ณตํต๋ ๊ฐ์ ๊ฐ์ง๊ณ ์ฐ์ฐ์ ์ํํ๋ฏ๋ก DFS๋ฅผ ์ด์ฉํด ํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ค.
๊ณ์ฐ ๊ฒฐ๊ณผ๋ ๊ณ์ฐ ๋์ค์ ๋์ค๋ ๊ฐ๋ค์ ์ ์ํ์ธ int์ ๋ฒ์ ์์ ๋ค์ด๊ฐ๋ฏ๋ก ๋ณ์๋ int๋ก ์ ์ธํ๊ณ , N์ ๋ฒ์๊ฐ 11 ์ดํ์ด๋ฏ๋ก ์ด ์์ด๋์ด๋ก๋ ์๊ฐ ์ด๊ณผ ๊ฑฑ์ ์ ์์!
๐ฅํ์ด๐ฅ
main์์ +, -, x, / ๋ฅผ ๊ฐ๊ฐ ํ๋ฒ์ฉ dfs ํจ์๋ฅผ ์คํ์์ผ ์ค๋ค.
dfsํจ์๋ ์ฐ์ฐ์๋ฅผ ๋ํ๋ด๋ idx, ๋ช๋ฒ์งธ ์ซ์๊น์ง ๊ณ์ฐํ๋์ง๋ฅผ ๋ํ๋ด๋ cnt, ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ result๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
๋ง์ง๋ง ์ซ์๊น์ง ์ฐ์ฐ์ ๋ง์ณค์ผ๋ฉด(cnt==n) ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ต๋,์ต์๋ ๋น๊ตํด์ ์ต๋๊ฐ, ์ต์๊ฐ์ ์ ๋ฐ์ดํธ.
์ฐ์ฐํด์ผ ํ ์ซ์๊ฐ ๋จ์์ผ๋ฉด ๋ํ๊ธฐ๋ถํฐ ๋๋๊ธฐ๊น์ง 4๋ฒ์ for๋ฌธ์ ๋๋๋ฐ ์ฐ์ฐ์๊ฐ ๋จ์์๋ ์ฐ์ฐ์๋ณ๋ก result ๊ฐ์ ์ ๋ฐ์ดํธ ํด์ dfs๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ํํ๋ค.
์ด๋ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์์ ๋ํ๋ด๊ธฐ ์ํด ์ฐ์ฐ์ ๊ฐ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ ๊ฐ์ -1ํด์ค๋ค.
์ค๋๋ง์ ํ๋ฒ์ ์ฑ๊ณต!
์๋๋ ์ ์ถํ ์ฝ๋์ด๋ค.
#include <iostream>
using namespace std;
int n;
int op[4];
int num[12];
int min_num = 1000000000;
int max_num = -1000000000;
void check(int x) {
if (min_num > x) min_num = x;
if (max_num < x) max_num = x;
}
void dfs(int idx, int cnt, int result) {
if (cnt == n) {
check(result);
return;
}
for (int i = 0; i < 4; i++) {
op[idx]--;
if (op[i] > 0) {
if (i == 0) dfs(i, cnt + 1, result + num[cnt]);
else if (i == 1) dfs(i, cnt + 1, result - num[cnt]);
else if (i == 2) dfs(i, cnt + 1, result * num[cnt]);
else if (i == 3) {
dfs(i, cnt + 1, result / num[cnt]);
}
}
op[idx]++;
}
}
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
};
int pl, mi, mu, di;
cin >> pl >> mi >> mu >> di;
for (int i = 0; i < 4; i++) {
op[0] = pl;
op[1] = mi;
op[2] = mu;
op[3] = di;
if (op[i] > 0) {
if (i == 0) {
dfs(0, 2, num[0] + num[1]);
} else if (i == 1) {
dfs(1, 2, num[0] - num[1]);
} else if (i == 2) {
dfs(2, 2, num[0] * num[1]);
} else if (i == 3) {
dfs(3, 2, num[0] / num[1]);
}
}
}
cout << max_num << "\n" << min_num;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 2098๋ฒ ์ธํ์ ์ํ (0) | 2022.07.16 |
---|---|
[๋ฐฑ์ค/C++] 1753๋ฒ ์ต๋จ๊ฒฝ๋ก (0) | 2022.07.15 |
[๋ฐฑ์ค/C++] 1790๋ฒ ์ ์ด์ด ์ฐ๊ธฐ 2 (0) | 2022.07.11 |
[๋ฐฑ์ค/C++] 16936๋ฒ ๋3๊ณฑ2 (0) | 2022.07.10 |
[๋ฐฑ์ค/C++] 15558๋ฒ ์ ํ ๊ฒ์ (0) | 2022.07.07 |