알고리즘/codewars

codewars: RGB To Hex Conversion

꾸준함. 2018. 2. 7. 01:43

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

16진수로 변환하는 간단한 문제였습니다.


/*

red, green, blue 값을 전달 받으면 16진수로 변환하여

16진수 형태로 string을 반환하는 함수를 작성하시오

*/

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

class RGBToHex

{

public:

        static std::string rgb(int r, int g, int b);

};

 

string number(int num)

{

        switch (num / 10)

        {

        case 0: //1자리수라면 그대로 반환

               return to_string(num);

        case 1: //두자리수라면

               switch (num % 10)

               {

               case 0:

                       return "A";

                       break;

               case 1:

                       return "B";

                       break;

               case 2:

                       return "C";

                       break;

               case 3:

                       return "D";

                       break;

               case 4:

                       return "E";

                       break;

               case 5:

                       return "F";

                       break;

               }

        }

}

 

string convert(int dec)

{

        string result;

        vector<int> v;

        //기저 사례: 0~255 사이의 숫자만 올 수 있다(16^2 - 1)

        if (dec > 255)

               return "FF";

        else if (dec <= 0)

               return "00";

        while (dec > 0)

        {

               v.push_back(dec % 16);

               dec /= 16;

        }

        if (v.size() == 1)

               return "0" + number(v[0]);

        else

               return number(v[1]) + number(v[0]);

}

 

std::string RGBToHex::rgb(int r, int g, int b)

{

        return convert(r) + convert(g) + convert(b);

}

 

int main(void)

{

        cout << RGBToHex::rgb(0, 0, 0) << endl;

        cout << RGBToHex::rgb(1, 2, 3) << endl;

        cout << RGBToHex::rgb(255, 255, 255) << endl;

        cout << RGBToHex::rgb(254, 253, 252) << endl;

        cout << RGBToHex::rgb(-20, 275, 125) << endl;

        return 0;

}


개발환경:Visual Studio 2017


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

반응형

'알고리즘 > codewars' 카테고리의 다른 글

codewars: Valid Braces  (0) 2018.02.14
codewars: Base -2  (0) 2018.02.07
codewars: Fun with trees: is perfect  (0) 2018.02.06
codewars Validate Credit Card Number  (0) 2018.02.01
codewars: Playing on a chessboard  (0) 2018.02.01