RGB To Hex Conversion ( 5 kyu )

문제

The rgb() method is incomplete. Complete the method so that passing in RGB decimal values will result in a hexadecimal representation being returned. The valid decimal values for RGB are 0 - 255. Any (r,g,b) argument values that fall out of that range should be rounded to the closest valid value.

The following are examples of expected output values:

rgb(255, 255, 255) // returns FFFFFF
rgb(255, 255, 300) // returns FFFFFF
rgb(0,0,0) // returns 000000
rgb(148, 0, 211) // returns 9400D3

rgb를 16진법으로 변환하는 문제

풀이

function rgb(r, g, b){
  let arr = [r, g, b];
  let result = '';
  for ( let i = 0; i < 3; i++ ) {
    if ( arr[i] < 0 ) {
      result += '00';
    } else if ( arr[i] > 255 ) {
      result += 'FF';
    } else {
      if ( arr[i].toString(16).length < 2 ) {
        result += '0' + arr[i].toString(16);
      } else {
        result += arr[i].toString(16).toUpperCase();
      }
    }
  }
  return result
}

0~255 밖인 경우 예외처리를 하고

toString(16)으로 16진법으로 변환하는데 이때 숫자는 한자리로 나오기 때문에 앞에 0을 붙여주고 더해서 리턴

조건문이 많이걸려서 지저분하다

다른 사람의 풀이

function rgb(r, g, b){
  return toHex(r)+toHex(g)+toHex(b);
}

function toHex(d) {
    if(d < 0 ) {return "00";}
    if(d > 255 ) {return "FF";}
    return  ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}

slice를 뒤에서부터하는거 똑똑한 방법인것 같음!


+ Recent posts