tech.kakao.com/2020/07/01/2020-internship-test/
이 문제 같은 경우에는, 알고리즘보다는 단순한 구현문제이다.
나 같은 경우에는 나올 수 있는 모든 경우를 배열로 만들어서 for문을 이용해서 모든경우의 합을 구하고,
그 합의 최대값을 출력시켰다.
#include <string>
#include <vector>
using namespace std;
long long solution(string expression) {
long long num[200];
char sNum[200];
int idx = 0;
long long sti = 0;
for(int i = 0; i < expression.size(); i++)
{
if(expression[i] >= '0' && expression[i] <= '9')
{
sti = (sti * 10) + (expression[i] - '0');
continue;
}
sNum[idx] = expression[i];
num[idx++] = sti;
sti = 0;
}
num[idx++] = sti;
char bf[6][3];
bf[0][0] = '*', bf[0][1] = '+', bf[0][2] = '-';
bf[1][0] = '*', bf[1][1] = '-', bf[1][2] = '+';
bf[2][0] = '+', bf[2][1] = '*', bf[2][2] = '-';
bf[3][0] = '+', bf[3][1] = '-', bf[3][2] = '*';
bf[4][0] = '-', bf[4][1] = '*', bf[4][2] = '+';
bf[5][0] = '-', bf[5][1] = '+', bf[5][2] = '*';
long long temp_num[200];
char temp_sNum[200];
long long sum[6] = {0,0,0,0,0,0};
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < idx; j++)
{
temp_num[j] = num[j];
temp_sNum[j] = sNum[j];
}
for(int j = 0; j < 3; j++)
{
for(int k = 0; k < idx; k++)
{
if(temp_sNum[k] == bf[i][j])
{
int next_k = k + 1;
while(temp_num[next_k]==-1) { next_k++; }
switch(temp_sNum[k])
{
case '+':
temp_num[next_k] = temp_num[k] + temp_num[next_k];
break;
case '-':
temp_num[next_k] = temp_num[k] - temp_num[next_k];
break;
case '*':
temp_num[next_k] = temp_num[k] * temp_num[next_k];
break;
}
temp_num[k] = -1;
}
}
}
for(int j = 0; j < idx; j++)
{
if(temp_num[j] == -1) { continue; }
sum[i] = temp_num[j];
}
if(sum[i] < 0) { sum[i] = sum[i] * -1; }
}
long long answer = 0;
for(int i = 0; i < 6; i++)
{
if(answer < sum[i]) { answer = sum[i]; }
}
return answer;
}
'프로그래밍 > 개발 이야기' 카테고리의 다른 글
[백준] 11000번 문제풀이 (0) | 2021.05.20 |
---|---|
[백준] 21313번 문제풀이 (0) | 2021.05.14 |
[C++] 2020 카카오 인턴십 for Tech developers 1번문제 (0) | 2021.05.08 |
[백준] 5585번 문제풀이 (2) | 2021.04.09 |
[백준] 12904번 문제풀이 (0) | 2021.04.09 |
댓글