알고리즘/코드워

[python]RGB To Hex Conversion

(ㅇㅅㅎ) 2020. 5. 13. 21:04
728x90
반응형

https://www.codewars.com/kata/513e08acc600c94f01000001/train/python

 

Codewars: Achieve mastery through challenge

Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.

www.codewars.com

이 문제는 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(2for i in rgb])
 
if __name__=='__main__':
    print(rgb(000))
    print(rgb(123))
    print(rgb(255255255))
    print(rgb(254253252))
    print(rgb(-20275235))
 

 

반응형

'알고리즘 > 코드워' 카테고리의 다른 글

[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