KoreanFoodie's Study

SW 역량테스트 - [백준] 연산자 끼워넣기 문제 풀이/해답/코드 (C++ / JAVA) 본문

Data Structures, Algorithm/SW 역량테스트

SW 역량테스트 - [백준] 연산자 끼워넣기 문제 풀이/해답/코드 (C++ / JAVA)

GoldGiver 2020. 10. 15. 23:39


SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!

해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다. 

코드에 대한 설명은 주석을 참고해 주세요 :)

 


문제 링크 : www.acmicpc.net/problem/14888

해답 코드 : 

 

#include <iostream>
#include <algorithm>

using namespace std;

int N;
int numbers[15];
int op[15];

int ans_min;
int ans_max;

int operate(int o1, int o2, int oper) {

	if (oper == 0) {
		return (o1 + o2);
	}
	else if (oper == 1) {
		return (o1 - o2);
	}
	else if (oper == 2) {
		return (o1 * o2);
	}
	else {
		return (o1 / o2);
	}

}

// cnt = # of computations
void calculate(int res, int cnt) {

	if (cnt > N - 1) {
		ans_max = max(ans_max, res);
		ans_min = min(ans_min, res);
		return;
	}

	//bool dup[4] = { false,false,false,false };
	int t_op, t_res;

	for (int i = 0; i < N - 1; i++) {

		t_op = op[i];
		
		// mark used operator
		op[i] = -1;
		if (t_op == -1) continue;

		t_res = operate(res, numbers[cnt], t_op);

		calculate(t_res, cnt + 1);
		
		// restore operator array
		op[i] = t_op;

	}
	

}


int main() {

	int t_op, i_op = 0;
	ans_min = INT32_MAX;
	ans_max = INT32_MIN;

	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> numbers[i];
	}

	// 0 : '+', 1 : '-', 2 : 'x', 3: '/'
	for (int i = 0; i < 4; i++) {
		
		cin >> t_op;

		for (int j = 0; j < t_op; j++, i_op++) {
			op[i_op] = i;
		}

	}

	calculate(numbers[0], 1);

	cout << ans_max << endl;
	cout << ans_min << endl;

	return 0;
}

 

SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)

SW 역량테스트 준비 - C++ 코드, Java 코드

SW 역량테스트 준비 - 백준 알고리즘 문제

Comments