728x90
반응형
https://www.codewars.com/kata/513e08acc600c94f01000001/train/python
이 문제는 RGB 값을 10진수로 입력받아 16진수로 바꾸어서 출력하는 문제입니다.
여기서 주의할 점은 0 이하의 수는 0으로 표기하고 255 이상인 수는 255로 표기하여야 합니다.
RGB 값은 음수가 될 수 없으며 255를 초과할 수도 없기 때문입니다.
문제 풀이를 보시려면 더보기를 클릭하시면 됩니다.
더보기
RGB To Hex Conversion
10진수를 다른 진수로 바꾸는 방법은 아래와 같습니다.
2진수 | bin(10진수 숫자) |
8진수 | oct(10진수 숫자) |
16진수 소문자 | hex(10진수 숫자) |
하지만 이렇게 출력을 하면 출력 시 2진수는 '0b', 8진수는 '0o', 16진수는 '0x'를 같이 출력합니다.
이 접두어를 제외하기 위해서 format을 사용하였습니다. format의 사용법은 아래와 같습니다.
2진수 | format(10진수의 수 , 'b') |
8진수 | format(10진수의 수, 'o') |
16진수 소문자 | format(10진수의 수, 'x') |
16진수 대문자 | format(10진수의 수, 'X') |
여기서 주의할 점은 2가지 있습니다.
1. 각 값이 음수일 경우와 255를 초과할 경우 예외처리
2. 각 값마다 2자리로 자릿수 맞추기
1번째 문제를 해결하기 위해서 if문으로 처리해 주었습니다. 0보다 작을 경우는 0으로 255보다 클 경우는 255로 설정하도록 하였습니다.
2번째 문제를 해결하기 위해서 zfill('문자열 최소 길이')를 사용하였습니다.
rgb() 함수는 if 문을 풀어서 작성하였고, rgb1() 함수는 if문을 한 줄로 변경하여 작성하였습니다.
rgb2() 함수의 경우는 rgb값을 배열로 받아서 for문으로 반복되는 부분을 처리하였습니다.
전체 코드
# My Code
def rgb(r, g, b):
if r < 0:
r = 0
elif r > 255:
r = 255
if g < 0:
g = 0
elif g > 255:
g = 255
if b < 0:
b = 0
elif b > 255:
b = 255
return format(r, 'X').zfill(2) + format(g, 'X').zfill(2) + format(b, 'X').zfill(2)
def rgb1(r, g, b):
return format(0 if r < 0 else 255 if r > 255 else r, 'X').zfill(2) \
+ format(0 if g < 0 else 255 if g > 255 else g, 'X').zfill(2) \
+ format(0 if b < 0 else 255 if b > 255 else b, 'X').zfill(2)
def rgb2(*rgb):
return "".join([format(0 if i < 0 else 255 if i > 255 else i, 'X').zfill(2) for i in rgb])
if __name__=='__main__':
print(rgb(0, 0, 0))
print(rgb(1, 2, 3))
print(rgb(255, 255, 255))
print(rgb(254, 253, 252))
print(rgb(-20, 275, 235))
|
반응형
'알고리즘 > 코드워' 카테고리의 다른 글
[python]Roman Numerals Decoder (0) | 2020.05.23 |
---|---|
[python]IP Validation (0) | 2020.05.16 |
[python]Take the Derivative (0) | 2020.05.09 |
[python]Triple Trouble (0) | 2020.05.08 |
[python]Beginner Series #2 Clock (0) | 2020.05.07 |