알고리즘/BOJ

백준 14888번 연산자 끼워넣기

꾸준함. 2018. 6. 30. 21:55

문제 링크입니다: https://www.acmicpc.net/problem/14888


모든 경우의 수를 고려해야하기 때문에 DFS(Depth First Search)를 통해 해결하는 문제였습니다.

적절한 조건을 걸고 더하기, 빼기, 곱하기, 나누기를 진행하면 어렵지 않게 풀 수 있는 문제였습니다.


#include <iostream>

#include <algorithm>

using namespace std;

 

const int MAX = 1000000000 + 1;

 

int N;

int number[12], Operator[4];

int maxResult = -MAX, minResult = MAX;

 

void DFS(int plus, int minus, int multiply, int divide, int cnt, int sum)

{

        //연산자를 모두 사용하였을 경우

        if (cnt == N)

        {

                 maxResult = max(maxResult, sum);

                 minResult = min(minResult, sum);

        }

       

        //모든 경우를 고려

        if (plus > 0)

                 DFS(plus - 1, minus, multiply, divide, cnt + 1, sum + number[cnt]);

        if (minus > 0)

                 DFS(plus, minus - 1, multiply, divide, cnt + 1, sum - number[cnt]);

        if (multiply > 0)

                 DFS(plus, minus, multiply - 1, divide, cnt + 1, sum * number[cnt]);

        if (divide > 0)

                 DFS(plus, minus, multiply, divide - 1, cnt + 1, sum / number[cnt]);

}

 

int main(void)

{

        cin >> N;

        for (int i = 0; i < N; i++)

                 cin >> number[i];

        for (int i = 0; i < 4; i++)

                 cin >> Operator[i];

 

        DFS(Operator[0], Operator[1], Operator[2], Operator[3], 1, number[0]);

 

        cout << maxResult << endl;

        cout << minResult << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 11724번 연결 요소의 개수  (0) 2018.07.01
백준 2583번 영역 구하기  (2) 2018.07.01
백준 10448번 유레카 이론  (0) 2018.06.30
백준 11585번 속타는 저녁 메뉴  (0) 2018.06.30
백준 11403번 경로 찾기  (0) 2018.06.30