Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 자연수 수열의 n번째 자릿수 찾기


자연수 수열이란?

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 값이 매우 클 경우(예: 백만 자리 이상) 문자열이 방대해져 메모리 효율이 떨어질 수 있다는 점을 참고하면 좋습니다. 대규모 입력에는 각 자릿수 범위별 개수를 계산해 직접 위치를 찾는 수학적 접근이 더 효율적입니다.