CodeKata 1-2

열심히하시는개발자·2020년 12월 29일
0

1. 문제

reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!예들 들어,
x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321

2. 내 풀이

  • 1시간 동안 생각해 낸 방법!

일단 정수형인 x를 string형으로 바꿔주고 새로 선언한 arr 배열을 for문으로 돌려서 값을 추출해낸 다음에 문제와 같은 조건들을 하나씩 맞춰주는 식으로 생각을 했지만, 내 생각대로 풀리지가 않았다.

  • 내 생각대로 짠 코드!
const reverse = x => {
   
   let str = String(x);
   let arr = [];
   let result = '';
   

   for(let i=str.length-1; i>=0; i--){
     arr.push(str[i]);
     console.log(arr);
     if(arr[0] === "0"){
      arr.splice(0,1);
     }else if(arr[arr.length-1] === "-"){
       arr.splice(arr.length-1 , 1);
       arr.unshift("-");
     }
   }
}

위에 코드를 보면 arr배열에 값들을 push 하여 내가 생각한대로 만들었지만 return result로 어떻게 마무리할지 잘 모르겠다..ㅜ

3. model solution

function reverse(x) {
  let minus = false;
  
  if (x < 0) {
      x *= -1;
      minus = true;
  }
  
  let numText = x.toString();
  let result = '';
  
  for (let i = numText.length-1; i >= 0; i--) {
      result += numText[i];
  }
  
  result = minus ? result * -1 : Number(result);
  
  return result;
}
  • 모델 솔루션 보고 느낀 점...

모델 솔루션을 보고도 이해가지 않았던 부분이 하나 있었다.
만약 x = 1230으로 값이 들어왔을 때 for문에 의해서 '0321'로 바뀌고
Number(result)를 하면 그냥 0321로 나온다고 생각을 했다. console.log(result)를 result = minus ? result * -1 : Number(result); 앞 뒤로 찍어보니 Number(result)를 지나간 console.log(result)는 0이 사라진 321로 값이 반환되었다.. 그래서 Number()메서드를 쓰게 되면 앞에 0이 사라진다(?) 라는 걸 알게 되었다... 뭔가 후련하지 않아서 나중에 멘토님한테 다시 물어봐야겠다.

0개의 댓글