[백준 C++] 14888 : 연산자 끼워넣기CSE/코딩 문제풀이2024. 11. 8. 19:50
Table of Contents
https://www.acmicpc.net/problem/14888
DFS로 구현하였다.
연산자 우선 순위를 무시하는 것, 나눗셈은 정수 나눗셈으로 몫만 취한다 등등 조건 덕분에 풀기 쉬운 문제이다.
#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;
vector<int> list;
int maxValue = INT_MIN;
int minValue = INT_MAX;
int N;
void calculate(int add, int sub, int mul, int div, int depth, int value)
{
if (depth == N)
{
maxValue = max(maxValue, value);
minValue = min(minValue, value);
return;
}
if (add != 0)
calculate(add - 1, sub, mul, div, depth + 1, value + list[depth]);
if (sub != 0)
calculate(add, sub - 1, mul, div, depth + 1, value - list[depth]);
if (mul != 0)
calculate(add, sub, mul - 1, div, depth + 1, value * list[depth]);
if (div != 0)
calculate(add, sub, mul, div - 1, depth + 1, value / list[depth]);
return;
}
int main()
{
int operators[4];
cin >> N;
for (int i = 0; i < N; i++)
{
int temp;
cin >> temp;
list.push_back(temp);
}
for (int i = 0; i < 4; i++)
{
int temp;
cin >> temp;
operators[i] = temp;
}
calculate(operators[0], operators[1], operators[2], operators[3], 1, list[0]);
cout << maxValue << "\n" << minValue << endl;
}
참고로 백준에서는 INT_MAX와 INT_MIN를 사용하고 싶다면 #include <limits>가 아닌 #include <climits>를 사용해야 한다.
'CSE > 코딩 문제풀이' 카테고리의 다른 글
[백준 C++] 24479 : 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2024.11.10 |
---|---|
[백준 C++] 14889 : 스타트와 링크 (0) | 2024.11.09 |
[백준 C++] 1260 : DFS와 BFS (0) | 2024.11.08 |
[프로그래머스 C++] 동영상 재생기 (0) | 2024.09.29 |
[프로그래머스 C++] 숫자 짝꿍 (0) | 2024.06.10 |
@NiffJB :: 개발하는 니프
CSE & GAME 개발 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다!