Code Kata #2 Reverse
💻Reverse
reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
예들 들어, x: 1234 return: 4321
x: -1234 return: -4321
x: 1230 return: 321
☕첫번째 풀이
const reverse = x => {
let str = x.toString()
const arr = str.split('')
const newArr = arr.reverse()
let newStr = newArr.join('')
return Math.sign(x)*newStr
//return parseInt(x.toString().split('').reverse().join('')) * Math.sign(x);
}
단순하게 생각했다.
문제의 요구사항은 '정수인 숫자', 를 '뒤집어' 2개 였음으로 숫자를 뒤집을 방법을 찾았다.
reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
예들 들어, x: 1234 return: 4321
x: -1234 return: -4321
x: 1230 return: 321
const reverse = x => {
let str = x.toString()
const arr = str.split('')
const newArr = arr.reverse()
let newStr = newArr.join('')
return Math.sign(x)*newStr
//return parseInt(x.toString().split('').reverse().join('')) * Math.sign(x);
}
단순하게 생각했다.
문제의 요구사항은 '정수인 숫자', 를 '뒤집어' 2개 였음으로 숫자를 뒤집을 방법을 찾았다.
머릿속에서 가장 간단한 방법은
let str = x.toString() // 배열로 변환하기 위해 문자열 변환
const arr = str.split('') //배열로 변환
const newArr = arr.reverse() // 배열 메소드 활용하여 거꾸로 뒤집기
let newStr = newArr.join('') // 뒤집은 배열을 다시 문자열로 합치기
return Math.sign(x) // javascipt가 동적 타입 언어인 것을 활용하여 그냥 문자열에 정수 곱해버리기
였다.
빠르게 문제를 해결한 후 변수 너무 많았음으로 리팩토링을 진행하기로 하였다.
const reverse = x => {
return parseInt(x.toString().split('').reverse().join('')) * Math.sign(x);
}
리팩토링을 진행하였음에도 아쉬운 점이 많았는데 그 이유는 너무나 많은 형 변환이었다.
정수->문자열->배열->문자열->정수....
이는 분명 코드의 성능을 떨어트리는 요인이 될것이라고 판단. 다른 방법을 고민해보기로 하였다.
💡두번째 풀이
const reverse = x => {
let r = 0
let q = 0
while(x){
r = x%10
q = (q*10) + r
x = parseInt(x/10)
}return q
}
정수를 인자로 받았으니 정수만으로 해결해보고 싶었다.
const reverse = x => {
let r = 0 // 나머지를 담을 빈 정수 r을 생성
let q = 0 // 답을 담을 빈 정수 q를 생성
while(x){
r = x%10 // 인자로 받은 x를 10으로 나눈 후 나머지를 r에 저장 (1의 자리 수 확보)
q = (q*10) + r // 반복문이 돌며 수가 계속 채워져야 함으로 확보한 나머지에 10을 곱하여 10의 자리로 보낸 후 새로운 나머지를 더하기
x = parseInt(x/10) // 이 식은 x의 몫이 0이 될때까지 진행
}return q
}💡
인자인 x
가 정수기 때문에 나머지와 몫을 활용해야겠다는 생각은 빠르게 떠올랐다.
하지만 언제까지 실행할 것인가? 에 대한 부분에서 막혀벼렸다.
평상시 for문
을 돌릴때는 i
값, 주로 배열의 반복문을 돌릴때가 많다보니,
순수한 정수를 반복문에 활용한다 라는 개념이 머릿속에 잘 들어오지 않았다.
이 부분에 대해 고민하던 중 정말 처음 JS를 배울 때 사용하던 while문
이 떠올랐다.
while문을 사용하면 얼마만큼 반복해야 할 지 몰라도 반복문을 돌릴 수 있었다.
x = x/10 // 처음엔 단순히 x값을 계속 10으로 나누면 되겠지 했는데, 0으로 딱 떨어지지 않아서그런지 infinity가 출력이 되었다.
x = parseInt(x/10) // parseInt를 사용하여 0근사치는 0으로 출력되게 만들어 주었다.
Author And Source
이 문제에 관하여(Code Kata #2 Reverse), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kich555/Code-Kata-2-twoSum저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)