백준

[220728] 백준풀기 (14888)

2022. 7. 28. 18:46

 

 

 

- 14888: 연산자 끼워넣기 (다시 풀어보기)

     백트래킹, DFS를 사용해야 하는 문제였다.

 

 

 

- 240229 다시 풀기

코드는 다음과 같다.

#include <iostream>
using namespace std;

int N;
int operands[11]; // 수열 
int operators[4]; // 연산자의 개수
int mymin = 1000000001;
int mymax = -1000000001;

void getanswer(int result, int idx) {
    
    if(idx == N) // idx로 계산 N번 했는지 세고 N번 했으면 계산종료하도록 함
    {
        if(result > mymax)   //결과값을 max, min과 비교해 새로 저장해줌
            mymax = result;
        if(result < mymin)
            mymin = result;
        return;
    }
    
    for(int i = 0; i < 4; i++) {
        if(operators[i] > 0) {
            operators[i]--; // 연산자 하나 사용했으므로 1개 줄여줌
            if(i == 0)
                getanswer(result + operands[idx], idx+1);
            else if(i == 1)
                getanswer(result - operands[idx], idx+1);
            else if(i == 2)
                getanswer(result * operands[idx], idx+1);
            else
                getanswer(result / operands[idx], idx+1);
            operators[i]++; // 다른 연산자를 사용할 것이므로 아까 줄였던 연산자 개수 늘려줌
            // 계산후 줄였던 연산자 개수 다시 복원해줌
        }
    }
    
    return;
}


int main() {
    cin >> N;
    
    for(int i = 0; i < N; i++)
        cin >> operands[i];
    
    for(int i = 0; i < 4; i++)
        cin >> operators[i];
    
    getanswer(operands[0],1);
    
    cout << mymax << '\n';
    cout << mymin;
}

 

 

 

 

 

'백준' 카테고리의 다른 글

[220819,20] 백준풀기 (25426)  (0) 2022.08.19
[220731] 백준풀기 (12865)  (0) 2022.07.29
[220727] 백준풀기 (15922)  (0) 2022.07.27
[220725-26] 백준풀기 (2002)  (0) 2022.07.25
[220724] 백준풀기 (1283)  (0) 2022.07.24