문제 링크 : https://www.acmicpc.net/problem/14888
완전탐색으로 풀었다.
가능한 연산자 조합의 경우를 모두 계산해보고 그 중 최소값과 최대값을 체크하여 마지막에 출력하였다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <iostream> using namespace std; int a[11]; int oper[4]; int minNum = 1000000001, maxNum = -1000000001; int oprtn(int fir, int oper, int sec) { switch (oper) { case 0: return fir + sec; case 1: return fir - sec; case 2: return fir * sec; case 3: if (fir < 0) { int tmp = fir * -1; tmp = tmp / sec; return tmp * -1; } else { return fir / sec; } default: break; } } void recur(int fir, int secIndex, int toPick) { if (toPick == 0) { if (fir > maxNum) maxNum = fir; if (fir < minNum) minNum = fir; return; } for (int i = 0; i < 4; i++) { if (oper[i] == 0) continue; oper[i]--; int ans = oprtn(fir, i, a[secIndex]); recur(ans, secIndex + 1, toPick - 1); oper[i]++; } } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < 4; i++) { cin >> oper[i]; } recur(a[0], 1, n - 1); cout << maxNum << "\n" << minNum; } | cs |
'Algorithm > 백준' 카테고리의 다른 글
백준 14890번 경사로 (0) | 2019.04.28 |
---|---|
백준 14503번 로봇 청소기 (0) | 2019.04.27 |
백준 14500번 테트로미노 (0) | 2019.04.26 |
백준 13460번 구슬 탈출 2 (0) | 2019.03.08 |
백준 2407 조합 (0) | 2019.02.26 |