reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
x: 숫자 return: 뒤집어진 숫자를 반환!
예들 들어, x: 1234 return: 4321
x: -1234 return: -4321
x: 1230 return: 321
오늘의 문제! (사실은 엊그제)
뒤집어진 숫자 반환하기! 하지만 -(음수)면 마이너스가 그대로 맨 앞에 와야한다.
const reverse= x => {
//1.
let arr =x.toString().split('').reverse();
//2.
if(arr[arr.length-1]==='-'){
arr.unshift('-')
arr.pop()
}
//3.
let result=arr.join('')
//4.
return parseInt(result)
}
하지만 마음에 들지 않는다.
어디선가 봤는데,unshift/shift
메서드는 배열의 맨 앞 요소를 삭제/삽입 하기 위해 모든 배열을 건들여 한칸씩 미루거나 당겨와야된다.
따라서pop,push
등, 맨 뒤 요소 하나만 건들여 삽입하는 행위에 비해 너무 비효율적이고 성능에 안좋다는 것이다.
배열이 이렇게 짧을때는 문제가 안되지만, 배열이 길어 질수록 성능이 떨어진다. 지양하는게 좋다.
그래서 순수 for문 / if문으로만 풀어 봤다.
const reverse=x=>{
let result=""
let real=""
//1.
let string=x.toString()
//2.
if(string[0]=="-"){
for(let i=string.length-1;i>=1;i==){
result+=stirng[i]
//3.
real="-"+result
}
}else{
//4.
for(let i=string.length-1;i>=0;i--){
real+=string[i]
}
}
//5.
return parseInt(real)
}
단점:무슨 의도로 작성했는지 코드의 의미가 전혀 읽히지 않아 가독성이 매우 떨어진다.
const reverse = x => {
// 여기에 코드를 작성해주세요.
if(x<0){
let numArray = String(x*(-1)).split("")
return numArray.reverse().join("")*(-1)
}
let numArray = String(x).split("")
return parseInt(numArray.reverse().join(""))
}
shift,unshift도 안쓰고, 가독성도 나쁘지 않지만 뭔가 좀 더 개선하고 싶은 욕심이 들었다.
const reverse = x => {
//1.
const arr = Math.abs(x).toString().split("");
//2.
let result = Number(arr.reverse().join(''));
//3.
return (x > 0) ? result : result * -1;
}
네번째 풀이에서야 abs 함수를 알게되었다. 양수/음수 변환해주고, 그에 따라 값도 다르게 리턴해주는게 왠지 코드가 길어지고 구려보였는데, 이 메서드와 삼항연산자를 쓰니까 확 줄었다.
[MDN에서 정의하는 abs 함수!]
오..코드의 의도도 보이고, 간결해져서 가독성이 높아졌다. 마음에 든다.^^ 이 코드로 최종 결정~ 제출완.
참고자료:
MDN | Array.prototype.join()
MDN|Array.prototype.unshift()
MDN | Array.prototype.pop()
MDN | Array.prototype.push()
MDN | Math.abs()