본문 바로가기

CodingTest Exam/[C++] Algorithm Study

85. 수식만들기(삼성 SW역량평가 기출문제 : DFS 활용) (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★★☆☆☆

#include <stdio.h>

int n, mxAns = 0, mnAns = 2147000000;
int N[10];
int C[4];

void DFS(int x, int y)
{
	if(x == n)
	{
		if(mxAns < y) mxAns = y;
		if(mnAns > y) mnAns = y; 
	}
	else
	{
		for(int i = 0; i < 4; i++)
		{
			if(C[i] != 0) // 해당 수식의 개수가 남아있다면
			{
				C[i]--; // 쓴다
				if(i == 0) DFS(x+1, y+N[x+1]);
				else if(i == 1) DFS(x+1, y-N[x+1]);
				else if(i == 2) DFS(x+1, y*N[x+1]);
				else DFS(x+1, y/N[x+1]);
				C[i]++; // 쓰고나면 다시 복구
			}
		}
	}
}

int main()
{
	scanf("%d", &n);
	
	for(int i = 1; i <= n; i++)
	{
		scanf("%d", &N[i]);
	}
	
	for(int i = 0; i < 4; i++)
	{
		scanf("%d", &C[i]);
	}
	
	DFS(1, N[1]); // DFS(x,y) x : 입력 깊이, y : x 번째 숫자
	
	printf("%d\n", mxAns);
	printf("%d", mnAns);
	
	return 0;
}