숫자인 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 이기 때문
문제푸는 수도 코드의 과정.
<풀이 1번>
const sameReverse = num => {
const numToArray = String(num).split("")//스트링화 된 문자를 다시 스플릿으로 나눠서 배열로 전환
console.log(numToArray);// 콘솔을 찍어 확인해 보는 과정도 필요하다!!!
const numReverse = [...numToArray].reverse()// 리버스 메서드와 더불어 깊은 복사를 활용한다.
// 이 부분은 다시 아래에 상술할 예정임.
console.log(numReverse); // 리버스 확인.
if(String(numToArray)=== String(numReverse)){
return true;
}
else{
return false;
}
}
console.log(sameReverse(230));
풀이2.
const sameReverse = num => {
let reverseNum = Array.from(String(num)).reverse().join('').toString()
//후술하겠지만, Array.from() 메서드는 유사 배열 객체(array-like object)나
//반복 가능한 객체(iterable object)를 얕게 복사해 새로운Array 객체를 만든다. 이후에는 다시
//배열의 순서를 뒤집는다. 그리고 다시 조인 메서드를 통해 숫자와 시켜준다. 그리고 toString 메서드
//로 문자화 시킨다.
return (String(num) === reverseNum);// 이제 기존의 num의 문자화와 리버스 넘의 문자화를 비교한다.
}
console.log(sameReverse(1234))
module.exports = { sameReverse }
const sameReverse = num => {
let a = Number(String(num).split("").reverse().join(""))
if( a === num) {
return true
} else return false
}
풀이 3의 경우, 풀이2와 대동소이 하나,
a를 스트링화를 다시 하지 않고 숫자 그대로 비교해 본다는 점에서 차이가 있다. 이 경우에도, 역시 동일하게 작동하다.
이유는 음수일 경우 역시 엄격 일치 연산자를 통해 비교해 보면, -121과 121-는 다르기 때문이다.
따라서 해당 코드 역시 테스트 통과가 가능했다.
💡 이후 얇은 복사 깊은 복사에 대한 개념을 조금 더 알아볼 필요가 있다. 이에 대해서 추가학습 해두면 좋겠다.