문제
* 정수인 인자를 받아 숫자의 순서를 뒤집은 값을 return 하는 함수 reverse 를 구현하시오.
ex) 인자: 1234 -> return 4321, 인자: -1234 -> return -4321
문제 해결 방법 구상
1) 인자로 받은 숫자를 뒤에서부터 한글자씩 뽑아서 빈배열에 값을 앞에서부터 집어 넣어 순서를 뒤집고, 배열의 모든 값을 합친 값을 return 하는 방법으로 접근함.
2) 뒤에서 부터 한글자씩 뽑으려면 반복문을 써야 하는데, 반복문을 쓰려면 정수의 전체 길이값이 필요하고, 길이값을 구하기 위해 인자로받은 정수를 string 으로 변환하기로 함.(String.length)
3) 처음엔 slice() 함수를 써보려 했으나, 뒤에서부터 한글자씩 뽑아내는 방식에는 적합하지 않아, substr() 함수를 사용하기로 함.
4) 첫번째 인자에 음수를 줘서 뒤에서부터 뽑아내는 것은 구현했는데, 반복문의 변수 i의 시작 값이 0인 경우 무조건 맨 앞자리 수가 처음 뽑히는 것을 해결하기 위해 변수 i의 시작 값을 1로 조정하고, 조건문을 걸어서 인자가 음수일 경우 맨 앞자리는 '-' 이므로 반복문 앞에서 맨 앞자리를 배열로 뽑아내고, 인자가 양수일 경우는 맨 앞자리가 맨 마지막에 가야하므로 반복문의 뒤에서 맨 앞자리를 배열로 뽑아내기로 함.
5) 이렇게 뽑아낸 수들로 이루어진 배열의 각 값을 더한 값을 다시 숫자형으로 바꿔서 리턴함.
코드 작성
const reverse = num => {
const cha = String(num); // 인자(숫자형) -> 문자열 전환
const arr = [];
let result = "";
if (num < 0) { // 인자가 음수 일때
arr.unshift(cha.substr(0,1)) // 맨앞자리('-')는 배열의 첫번째 값으로 할당함
for (let i = 1; i < cha.length; i++) { // 맨뒷자리(-1) 부터 한글자씩 배열에 할당함
arr.push(cha.substr(-i,1));
}
} else {
for (let i = 1; i < cha.length; i++) { // 인자가 양수 일 때
arr.push(cha.substr(-i,1)); // 맨뒷자리(-1) 부터 한글자씩 배열에 할당함
}
arr.push(cha.substr(0,1)) // 맨앞자리는 배열의 마지막 값으로 할당함
}
for (let i = 0; i < arr.length; i++) {
result += arr[i]; // 배열의 값들을 result 에 할당
}
return Number(result) // result(문자열) -> 숫자형 전환
}
작성 후 알게 된 점
1) 전에 받은 인자를 맨 앞에서 부터 한글자씩 뽑아내는 함수를 작성한적 있는데, 그 때는 slice 함수가 적합했지만, slice 함수의 인자에 음수값을 넣어 반복문 돌려서 뒤에서부터 한 글자씩 뽑아 낼때는 적합하지 않다. 이럴 때는 substr 함수를 쓰자.