문제 정의
어느 도시 N의 자동차 등록 시스템은 두 가지 종류의 번호를 부여합니다.
고객 ID(Customer ID) — 0부터 17558423까지의 자연수로, 차량 구매자에게 순서대로 할당됩니다. 첫 번째 고객은 ID 0을, 두 번째 고객은 ID 1을 받는 방식입니다.
번호판(Number Plate) — 차량에 부여되는 번호로, 시리즈(a부터 z까지의 라틴 소문자 3개)와 일련번호(0부터 9까지의 숫자 3개)로 구성됩니다.
예를 들어
aaa001과 같은 형태입니다. 각 번호판은 특정 고객 ID와 연결되어 있으며, 번호판aaa001은 고객 ID 0에,aaa002는 고객 ID 1에 대응됩니다.
즉, 우리가 작성해야 할 것은 고객 ID를 입력받아 그에 대응하는 번호판을 계산하고 문자열로 반환하는 JavaScript 함수입니다.
구현 코드
다음은 이 문제를 해결한 코드입니다.
const id = 545664;
const findNumberPlate = (id = 0) => {
const letters = 'abcdefghijklmnopqrstuvwxyz';
let num = String(id % 999 + 1);
if(num.length !== 3);
while(num.length !== 3){
num = '0' + num;
};
const l = Math.floor(id / 999);
return letters[l % 26] + letters[(Math.floor(l / 26)) % 26] + letters[(Math.floor(l / (26 * 26))) % 26] + num;
};
console.log(findNumberPlate(id));코드 동작 원리
이 함수의 핵심 로직은 다음과 같이 정리할 수 있습니다.
일련번호 계산:
id % 999 + 1을 통해 한 시리즈(알파벳 조합)당 최대 999개의 번호판이 매겨지도록 합니다. 결과가 세 자리 미만일 경우 앞에 0을 채워 세 자리로 맞춥니다.시리즈(문자) 계산:
Math.floor(id / 999)로 몇 번째 알파벳 조합인지 구한 뒤, 26진법처럼 각 자리를 나누어 세 개의 소문자를 결정합니다.결합: 계산된 문자 세 개와 일련번호를 이어 붙여 최종 번호판 문자열을 만듭니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
ava211
고객 ID 545664에 대응하는 번호판이 ava211임을 확인할 수 있습니다.