1 분 소요

문제

{1, 7, 1, 2} 라는 입력이 주어진다면 0번째 인덱스는 무조건 물 1개를 의미하고 그 외의 i 번째 인덱스는 음식의 개수를 의미한다. 이 음식을 대칭적으로 분포를 하고 가운데는 무조건 물을 배치하는 결과를 리턴하시오. 홀수면 1을 줄여서 짝수로 만들고 생각.

문제 풀이

#include <string>
#include <vector>
#include <iostream>

using namespace std;

class Test
{
protected:
    vector<int> food;
    string getReverse(string str);

public:
    Test(vector<int> food);
    string solve();
};
Test::Test(vector<int> food)
{
    this->food = food;
}
string Test::getReverse(string str)
{
    string reverse = "";
    for (int i = str.size() - 1; i >= 0; i--)
    {
        reverse += str[i];
    }
    return reverse;
}
string Test::solve()
{
    string answer = "";
    for (int i = 1; i < food.size(); i++)
    {
        if (food[i] % 2 != 0)
        {
            food[i]--;
        }
        for (int cnt = 0; cnt < (food[i] / 2); cnt++)
        {
            answer += i + '0';
        }
    }
    string reverse = getReverse(answer);
    answer += "0";
    answer += reverse;
    cout << answer << endl;
    return answer;
}
string solution(vector<int> food)
{
    string answer = "";
    Test t(food);
    answer = t.solve();
    return answer;
}
// {1, 7, 1, 2}

이제는 어느 정도 감이 잡히는 것 같은데, 일단 Test 클래스를 만들어주고, intput에 해당하는 초기값을 생성자를 통해서 초기화를 시켜준다.
그 다음 solve 함수를 통해서 전반적인 틀을 만들고, 여기서 필요한 함수는 따로 빼서 protected로 넣어 둔다.

댓글남기기