자연수 수열이란?
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12...
이처럼 무한히 이어지는 수열을 자연수 수열(natural number sequence)이라고 합니다.
이번 문제는 다음과 같습니다. 첫 번째이자 유일한 인자로 숫자 num을 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 쉼표와 공백을 제거하고 자연수를 하나로 이어 붙인 문자열에서 num번째에 해당하는 자릿수를 찾아 반환해야 합니다.
문제 예시
예를 들어 입력값이 다음과 같다고 가정해 보겠습니다.
const num = 13;
그렇다면 출력 결과는 아래와 같아야 합니다.
const output = 1;
그 이유는 '1234567891011'이라는 문자열에서 13번째 문자가 1이기 때문입니다.
구현 코드
이 문제를 해결하는 코드는 다음과 같습니다.
const num = 13;
const findDigit = (num = 1) => {
let str = '';
let i = 1;
while(str.length < num){
str += i;
i++;
};
const required = str[num - 1];
return required;
};
console.log(findDigit(num));
코드 동작 방식
이 코드의 로직은 매우 직관적입니다.
- 빈 문자열 초기화: str 변수에 자연수를 하나씩 이어 붙여 나갑니다.
- 반복 조건: while 루프는 문자열의 길이가 목표 위치 num보다 짧은 동안 계속 실행됩니다.
- 숫자 이어 붙이기: i를 1부터 시작해 문자열에 추가하고, 매 반복마다 i를 1씩 증가시킵니다.
- 결과 추출: 문자열 길이가 num 이상이 되면, 배열 인덱스 특성상 실제 위치보다 1이 작으므로 str[num - 1]로 해당 자릿수를 가져옵니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
1
이 방식은 구현이 간단하지만, num 값이 매우 클 경우(예: 백만 자리 이상) 문자열이 방대해져 메모리 효율이 떨어질 수 있다는 점을 참고하면 좋습니다. 대규모 입력에는 각 자릿수 범위별 개수를 계산해 직접 위치를 찾는 수학적 접근이 더 효율적입니다.