이번 글에서는 숫자를 입력받아 자릿수를 거꾸로 뒤집은 값을 반환하는 JavaScript 함수를 작성해 보겠습니다.
가장 중요한 조건은 숫자의 부호가 유지되어야 한다는 점입니다. 예를 들어, 음수를 뒤집더라도 결과는 여전히 음수여야 합니다.
문제 정의
주어진 숫자의 자릿수 순서를 반대로 바꾸는 함수를 만듭니다.
- 양수 123 → 321
- 음수 -224 → -422
즉, 단순히 문자열을 뒤집는 방식이 아니라 부호 정보를 보존하면서 뒤집어야 합니다.
해결 코드
다음은 위 문제를 해결하는 코드입니다.
const num = -224;
function reverseNumber(n) {
let x = Math.abs(n); // 절댓값으로 변환하여 부호 제거
let y = 0;
while (x > 0) {
y = y * 10 + (x % 10); // 마지막 자릿수를 추출해 뒤집힌 값에 추가
x = Math.floor(x / 10); // 처리한 자릿수 제거
}
return Math.sign(n) * y; // 원래 부호를 다시 붙여 반환
}
console.log(reverseNumber(num));
실행 결과
-422
코드 동작 원리
이 알고리즘은 크게 세 단계로 동작합니다.
1. 절댓값으로 변환
Math.abs(n)을 사용해 입력값의 부호를 임시로 제거합니다. 이렇게 하면 나머지 연산(%)과 나눗셈을 음수 걱정 없이 수행할 수 있습니다.
2. 반복문으로 자릿수 뒤집기
x % 10으로 현재 숫자의 마지막 자릿수를 하나씩 추출하고, y * 10 + 나머지 연산을 통해 뒤집힌 숫자를 차곡차곡 쌓아갑니다. 그다음 Math.floor(x / 10)으로 이미 처리한 자릿수를 잘라냅니다.
예를 들어 224의 경우:
- 1회전: y = 0 × 10 + 4 → 4, x = 22
- 2회전: y = 4 × 10 + 2 → 42, x = 2
- 3회전: y = 42 × 10 + 2 → 422, x = 0 (종료)
3. 부호 복원
Math.sign(n)은 양수면 1, 음수면 -1을 반환하므로, 이를 곱해주면 원래 입력값의 부호가 그대로 살아납니다. 덕분에 -224는 -422로 올바르게 반환됩니다.
마무리
이처럼 Math.abs(), Math.sign(), 그리고 간단한 반복문만 활용하면 부호를 유지하면서 숫자를 뒤집는 함수를 손쉽게 구현할 수 있습니다. 코딩 테스트나 알고리즘 연습에서 자주 등장하는 패턴이니 꼭 기억해 두세요!