본문 바로가기
Programming/BOJ

[C/C++] 백준 #1790 수 이어쓰기 2(수학)

by 작은별하나 2022. 10. 22.
반응형

수를 그냥 있는 그대로 이어쓰기를 하면 자릿수가 늘어나면서 수 하나당 2개, 3개씩 숫자가 쓰여질겁니다.

 

이것만 체계적으로 잘 정리하면 풀 수 있는 문제입니다.

한자리 숫자의 개수는 9개, 두자리 숫자의 개수는 90개, 세자리 숫자의 개수는 900개로 k개의 자릿수의 숫자는 \(9 \times 10^{k-1}\)로 표현할 수 있습니다.

 

이것만 알면 손쉽게 문제를 풀 수 있습니다.

 

제가 작성한 소스입니다.  소스는 참고용으로 봐주세요.

//------------------------------------------------------
//    baekjoon #1790 - Making number with serial numbers 2
//        - by Aubrey Choi
//        - created at 2019-08-23
//------------------------------------------------------
#include <stdio.h>

int main()
{
    int n, k, s, r, t;
    scanf("%d%d",&n,&k);
    for(s=9,r=1,t=1; s*r<k; k-=s*r,s*=10,r++,t*=10);
    k--; t+=k/r, k%=r;
    if(n<t) { puts("-1"); return 0; }
    k=r-k-1;
    while(k--) t/=10;
    printf("%d\n",t%10);
}

728x90

댓글