문제
reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
x: 숫자 return: 뒤집어진 숫자를 반환!
예들 들어, x: 1234 return: 4321
x: -1234 return: -4321
x: 1230 return: 321
문제를 보고 처음 들었던 생각은 들어온 숫자를 스트링으로 바꿔주는 메서드를 사용해서 배열로 다시 담은뒤 반복문을 사용하고 반복문을 역을로 돌려서 자리를 바꾼 뒤 다시 배열에 담은 뒤에 음수로 들어온 인자는 곱하기-1을하고 양수로 들어온 인자는 들어온데로 배열만 역으로 바꿔서 출력을 할려고 했었다.
그런데 개인적으로 반복문을 여러번 사용하는 로직은 약간의 거부감이 들기 때문에 (사용하는데 아직 어려움) 다른 메서드들을 찾아보았다
const reverse = x => {
// 여기에 코드를 작성해주세요.
let array = Math.abs(x).toString().split("");
// 음수를 양수로 전환, 스트링으로 전환, 쪼개기
let result = array.reverse().join("");
// 뒤집고, 합치기
return (x >= 0) ? result * 1 : result * -1;
//x가 0보다 크면 그대로, 반대면 *-1(음수는 음수로 반환)
}
console.log(reverse(1234))
위에 나온 결과가 최종 코드이다.더 좋은 방법도 많겠지만 한번 코드를 설명해보면
Math.abs()
함수는 주어진 숫자의 절대값을 반환합니다.x
가 양수이거나 0이라면x
를 리턴하고,x
가 음수라면x
의 반대값, 즉 양수를 반환합니다.(출처 mdn)
이 메서드를 사용해 전부 양수로 전환을 시켜버렸다.그 뒤에 순서를 바꾸기 위해 문자열로 전환하는 toString()
메서드를 사용하고 split("")
으로 하나하나 분리를 시켜준 뒤에 이 값들을 reverse()
를 사용해 순서를 역으로 바꿔주고 join("")
을 사용해 다시 합쳐주었다.
이 부분에서 새롭게 알게 된 부분이 있다. 처음 로직을 완성했을때는
let result = array.reverse().join("");
이 부분이
let result = Number(array.reverse().join(""));
Number()
함수를 사용하여 스트링을 다시 넘버로 바꿔주는 로직이 하나 더 있었다. 다른 분의 설명을 듣고 스트링 타입에 *
연산자를 넣어주면 스트링이 넘버로 변한 다는 것을 알게 되었다.
return (x >= 0) ? result 1 : result -1;
return에서 *
하나를 추가하여 Number()
함수 사용을 제거해 주었다.코드가 이해하기 더 쉬워졌다.
정리하자면Math.abs()
메서드와 스트링에 *
를 하면 넘버로 변환되는 것을 경험해 보았다.