문제 링크입니다: 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 |