코드카타 02: reverse

김현수·2022년 4월 12일
1

문제

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

내가 푼 답

const reverse = (x) => {
  const reversedNumber = parseInt(x.toString().split("").reverse().join(""));
  return x < 0 ? reversedNumber * -1 : reversedNumber;
};

parseInt는 숫자 + 문자열의 조합일 때 문자열 이전의 숫자를 반환하기에 변수에 저장하고, x가 음수이냐를 따져 반환할 때 -1을 곱하는 방식을 사용했다.

남의 답

const reverse = (x) => {
  let result = 0;

  while(x) {
    result = result * 10 + x % 10;
    x = Math.trunc(x / 10)
  }

  return result;
}
  1. 반환할 값 result의 초깃값을 0으로 설정한 뒤 while 문을 통해 반복문을 돈다.
  2. 반복문의 처음엔 기존에 저장된 값에 10을 곱해 자릿수를 늘려주며, 그 뒤에 x의 10을 나눈 나머지, 즉 1의 자리에 해당하는 숫자를 더한다.
  3. 이후 Math.trunc()을 통해 x가 양수이면 x / 10을 내림하고, x가 음수이면 x / 10을 올림한다.
  4. 반복문이 종료되었다면 x가 뒤집어졌다는 뜻이다.

내가 푼 방식은 메서드 체이닝을 통해 보기에 깔끔하다는 장점이 있는 것 같지만, 숫자의 자릿수가 커질 경우 쪼개고-뒤집고-붙이는 과정에서 불필요하게 많은 작업이 소요될 것 같다.

하지만 이 방식으로 풀면 숫자의 자릿수만큼만의 단계만이 소요되므로 훨씬 효율적일 것이라는 생각이 들었다.

0개의 댓글