반응형
수를 그냥 있는 그대로 이어쓰기를 하면 자릿수가 늘어나면서 수 하나당 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
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1812 사탕(수학) (0) | 2022.10.23 |
---|---|
[C/C++] 백준 #1806 부분합(두 포인터) (0) | 2022.10.22 |
[C/C++] 백준 #1789 수열의 합(수학) (0) | 2022.10.22 |
[C/C++] 백준 #1788 피보나치 수의 확장(수열) (0) | 2022.10.21 |
[C/C++] 백준 #1786 찾기(KMP) (0) | 2022.10.21 |
댓글