본문 바로가기
프로그래밍/개발 이야기

[C++] 2020 카카오 인턴십 for Tech developers 2번문제

by JR2 2021. 5. 8.

tech.kakao.com/2020/07/01/2020-internship-test/

 

2020 카카오 인턴십 for Tech developers 문제해설

2020년 카카오의 여름 인턴십이 시작 되었습니다.여름 인턴십의 첫번째 관문인 코딩 테스트가 2020년 5월 9일 오후 2시부터 6시까지 진행되었는데요, 온라인으로 진행되었기 때문에 코로나19로부터

tech.kakao.com

 

이 문제 같은 경우에는, 알고리즘보다는 단순한 구현문제이다.

나 같은 경우에는 나올 수 있는 모든 경우를 배열로 만들어서 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;
}

 

댓글