https://www.acmicpc.net/problem/14888
이 역시 Brute force 문제.
재귀함수를 이용해서 문제를 풀었다.
어떻게든 재귀함수를 이용해서 완전탐색을 풀려고 끙끙 앓다보니 재귀함수 구현하는 능력이 레벨업 된 것 같다..ㅎㅎㅎ,,,,
아래는 재귀함수를 이용한 풀이
#include <stdio.h>
FILE* in = fopen("input.txt", "r");
#define MAX 11
int n;
int input_array[MAX];
int sign[4];
int checked[4];
int max = -1000000000;
int min = 1000000000;
// 부호 숫자에 따른 계산값 출력해주는 함수
int calc(int type, int ret, int idx) {
int ans = ret;
switch (type)
{
case 0:
ans += input_array[idx];
break;
case 1:
ans -= input_array[idx];
break;
case 2:
ans *= input_array[idx];
break;
case 3:
ans /= input_array[idx];
break;
}
return ans;
}
//재귀함수로 구현한 dfs
void dfs(int selected, int ret) {
if (selected == n - 1)
{
if (ret > max)
max = ret;
if (ret < min)
min = ret;
return;
}
for (int i = 0; i < 4; i++)
{
if (checked[i] < sign[i])
{
checked[i]++;
dfs(selected + 1, calc(i, ret, selected + 1));
checked[i]--;
}
}
}
int main() {
fscanf(in, "%d", &n);
for (int i = 0; i < n; i++)
fscanf(in, "%d", &input_array[i]);
for (int i = 0; i < 4; i++)
fscanf(in, "%d", &sign[i]);
dfs(0, input_array[0]);
printf("%d\n%d", max, min);
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 14501번 퇴사 C/C++ 풀이 (0) | 2020.08.13 |
---|---|
백준 13460번 구슬 탈출 2 C/C++ 풀이 (0) | 2020.08.13 |
백준 15686번 치킨 배달 C/C++ 풀이 (0) | 2020.08.08 |
백준 17144 미세먼지 안녕! C/C++ 풀이 (0) | 2020.08.06 |
백준 14891번 톱니바퀴 C/C++ 풀이 (0) | 2020.08.05 |