10진수를 2진수로 변환할 때 숫자를 반복해서 2로 나누듯이, 7진법(base-7)에서는 주어진 숫자를 계속해서 7로 나눈 뒤 각 단계의 나머지를 모으면 7진수 표현을 얻을 수 있습니다.
이번 글에서는 임의의 숫자를 입력받아 그 숫자의 7진수 표현을 문자열로 반환하는 자바스크립트 함수를 작성해 보겠습니다.
문제 예시
base7(100) = '202'
100을 7진수로 변환하면 '202'가 됩니다. 검산해 보면 2×49 + 0×7 + 2×1 = 98 + 2 = 100이므로 올바른 결과입니다.
구현 코드
const num = 100;
const base7 = (num = 0) => {
// 음수 처리: 부호를 저장하고 절댓값으로 변환
const sign = num < 0 ? '-' : '';
num = Math.abs(num);
let result = '';
while (num > 0) {
// 7으로 나눈 나머지를 결과 문자열 앞에 붙임
result = (num % 7) + result;
// 소수점 이하를 제거하기 위해 정수 변환
num = Math.floor(num / 7);
}
return result ? sign + result : '0';
};
console.log(base7(num));출력 결과
위 코드를 콘솔에서 실행하면 다음과 같은 결과가 출력됩니다.
'202'
코드 동작 원리
- 부호 처리: 음수가 입력되면 부호('-')를 미리 저장한 뒤, 절댓값에 대해 변환을 진행합니다.
- 나머지 계산:
num % 7연산으로 현재 자릿수를 구하고, 결과 문자열의 앞쪽에 붙여 자릿수 순서를 유지합니다. - 정수 나눗셈:
Math.floor(num / 7)로 소수점 이하를 버려 다음 자릿수 계산을 준비합니다. - 0 처리: 입력이 0인 경우 while 루프가 실행되지 않으므로, 빈 문자열 대신 '0'을 반환하도록 처리했습니다.
마무리
이 알고리즘은 시간 복잡도가 O(log₇ n)으로 매우 효율적입니다. 같은 원리를 응용하면 2진수, 8진수, 16진수 등 임의의 진법으로 손쉽게 변환하는 함수를 만들 수 있습니다. 진법 변환 로직은 코딩 테스트에서도 자주 등장하는 기본 개념이므로 꼭 익혀두시길 추천합니다.