알고리즘/SWEA
[SWEA][모의 SW 역량테스트][C++] 4008 숫자 만들기
Min:D
2020. 7. 19. 13:21
문제
SWEA 모의 SW 역량테스트 - 4008 숫자 만들기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 풀이
접근 방식
연산자의 순서를 조합하여 연산의 최댓값과 최소값을 구하고, 그 값들의 차를 구하는 문제이다.
조합을 만들기 위해 next_permutation을 사용해 주었다.
그리고 연산자를 입력 받을 때 +는 0, -는 1, ×는 2, ÷는 3으로 저장하고,
switch문을 사용하여 연산을 해주었다.
풀이 코드 - C++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T, N;
// freopen("input.txt", "r", stdin);
cin >> T;
for (test_case = 1; test_case <= T; ++test_case) {
int n;
int MAX = -100000000;
int MIN = 100000000;
vector<int> opers;
vector<int> nums;
// 입력 받기
cin >> N;
for (int i = 0; i < 4; i++) {
cin >> n;
for (int j = 0; j < n; j++) {
opers.push_back(i);
}
}
for (int i = 0; i < N; i++) {
cin >> n;
nums.push_back(n);
}
// 연산자 조합하기
do {
int result = nums[0];
for (int i = 0; i < N - 1; i++) {
switch (opers[i]) {
case 0: // +
result += nums[i + 1];
break;
case 1: // -
result -= nums[i + 1];
break;
case 2: // *
result *= nums[i + 1];
break;
case 3: // /
result /= nums[i + 1];
break;
}
}
if (result > MAX)
MAX = result;
if (result < MIN)
MIN = result;
} while (next_permutation(opers.begin(), opers.end()));
cout << "#" << test_case << " " << MAX - MIN << endl;
}
return 0;
}