알고리즘/codewars

codewars: Build a pile of Cubes

꾸준함. 2018. 1. 29. 21:54

문제링크입니다: http://www.codewars.com/kata/5592e3bd57b64d00f3000047/train/cpp


/*

n개의 큐브를 쌓는 것이 당신의 임무이다.

제일 밑에 있는 큐브는 부피가 n^3이고 그 다음 큐브는 (n-1)^3,

그 다음은 (n-2)^3 ... 그리고 제일 위에 있는 큐브는 1^3이다.

총 부피 m을 매개변수로 받고 n이 존재한다면 n을 반환하고

그렇지 않다면 -1을 반환하시오

*/

#include <iostream>

using namespace std;

 

class ASum

{

public:

        static long long findNb(long long m);

};

 

long long cube(long long n) //3제곱

{

        int multiply = n;

        for (int i = 0; i < 2; i++)

               n *= multiply;

        return  n;

}

 

long long ASum::findNb(long long m)

{

        long long n;

        long long sum = 0;

        for (n = 1; sum < m; n++) //합이 주어진 값보다 작을 때까지

        {

               sum += cube(n); //세제곱수를 꾸준히 더한다

               if (sum == m) //답을 찾으면 반환

                       return n;

        }

        return -1;

}

 

int main(void)

{

        cout << ASum::findNb(4183059834009) << endl;

        cout << ASum::findNb(24723578342962) << endl;

        cout << ASum::findNb(135440716410000) << endl;

        cout << ASum::findNb(40539911473216) << endl;

        cout << ASum::findNb(26825883955641) << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형