[Code Kata] Week1 - Day4

JU CHEOLJIN·2021년 8월 25일
1

Algorithm

목록 보기
16/16
post-thumbnail

문제

숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.

num: 숫자 return: true or false (뒤집은 모양이 num와 똑같은지 여부)

예를 들어, num = 123 return false => 뒤집은 모양이 321 이기 때문
num = 1221 return true => 뒤집은 모양이 1221 이기 때문
num = -121 return false => 뒤집은 모양이 121- 이기 때문
num = 10 return false => 뒤집은 모양이 01 이기 때문

풀이

문제 접근

step 1. 입력 된 숫자 뒤집기

숫자의 경우에 reverse()라는 메소드를 사용할 수 없기 때문에 이를 이용할 수 있도록 변화시키려고 했다. 그래서 입력된 숫자를 배열로 변경하고 reverse() 메소드를 이용해서 반전된 배열을 만들었다.

let startNum = num.toString().split('');
let reverseNum = [...startNum].reverse();

step 2. 두 숫자 비교하기

이번 문제는 결국 뒤집은 모양이 같다면 true 를 반환하고 아니라면 false 를 반환하면 되는 문제이기 때문에 음수의 경우를 고려할 필요가 없었다. 음수의 경우에는 무조건 false 가 나오게 된다.

if (startNum.join("") === reverseNum.join("")) {
    return true;
  } else {
    return false;
  }

비교를 위해서(이때 숫자가 아닌 모양만 비교할 예정이기 때문에 join("") 를 하면서 Number() 등을 하지 않았다.

step 3. 최종 풀이

const sameReverse = num => {
  let startNum = num.toString().split('');
  let reverseNum = [...startNum].reverse();
  if (startNum.join("") === reverseNum.join("")) {
    return true;
  } else {
    return false;
  }
}

이전에 비슷한 문제를 해결했던 경험이 있어서 크게 어렵지 않게 풀 수 있었다. 다만, 더 간결하게 작성할 수 있는 코드가 있는지에 대한 의문은 남는다. 배열로 치환하고 이를 반전시키는 과정이 다소 아름답지 못하다는 생각이 들었다. 혹시나 추후에 더 좋은 코드를 발견하게 된다면 추가할 예정이다.

profile
사회에 도움이 되는 것은 꿈, 바로 옆의 도움이 되는 것은 평생 목표인 개발자.

0개의 댓글