https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
- 재귀를 이용해 간단히 풀 수 있다.
- 연산자 갯수를 저장하는 배열을 만들고 연산자의 개수가 N-1개 주어진다는 점을 활용한다.
더보기
#include <iostream>
#include <deque>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
#define N_MAX 11
int N;
int operatorArr[4]; // +, -, *, /
int maxValue;
int minValue;
// method
void Calc(std::deque<int>& src, int operCnt, int value)
{
if (N - 1 == operCnt)
{
maxValue = maxValue < value ? value : maxValue;
minValue = minValue > value ? value : minValue;
return;
}
// +
if (0 != operatorArr[0])
{
operatorArr[0]--;
int num = src.front();
src.pop_front();
value += num;
int plusCnt = operCnt + 1;
Calc(src, plusCnt, value);
value -= num;
src.push_front(num);
operatorArr[0]++;
}
// -
if (0 != operatorArr[1])
{
operatorArr[1]--;
int num = src.front();
src.pop_front();
value -= num;
int plusCnt = operCnt + 1;
Calc(src, plusCnt, value);
value += num;
src.push_front(num);
operatorArr[1]++;
}
// *
if (0 != operatorArr[2])
{
operatorArr[2]--;
int num = src.front();
src.pop_front();
value *= num;
int plusCnt = operCnt + 1;
Calc(src, plusCnt, value);
value /= num;
src.push_front(num);
operatorArr[2]++;
}
// /
if (0 != operatorArr[3])
{
operatorArr[3]--;
int num = src.front();
src.pop_front();
value /= num;
int plusCnt = operCnt + 1;
Calc(src, plusCnt, value);
value *= num;
src.push_front(num);
operatorArr[3]++;
}
}
int main()
{
// init
std::ios::sync_with_stdio(false);
memset(operatorArr, 0, sizeof(4));
maxValue = INT_MIN;
minValue = INT_MAX;
// input
N = 0;
(void)scanf("%d", &N);
std::deque<int> numList;
for (int n = 0; n < N; n++)
{
int input = 0;
(void)scanf("%d", &input);
numList.push_back(input);
}
for (int idx = 0; idx < 4; idx++)
{
int input = 0;
(void)scanf("%d", &input);
operatorArr[idx] = input;
}
// Calc
int startNum = numList.front();
numList.pop_front();
Calc(numList, 0, startNum);
// print
printf("%d\n%d", maxValue, minValue);
return 0;
}
'Coding Problem > SW 역량 테스트' 카테고리의 다른 글
[백준/SW역량테스트 기출] 14889 - 스타트와 링크 (0) | 2021.05.13 |
---|---|
[백준/SW역량테스트 기출] 13458 - 시험 감독 (0) | 2021.02.03 |