문제접근
•
이분탐색은 도저히 모르겠어서 구현으로..
•
for문으로 기준숫자(i)를 증가시키면서 각 숫자마다 자릿수를 numlen함수를 통해서 구한다
•
구함과 동시에 자릿수(len)를 계속 더해주고 k를 넘어갈때까지 구해준다
•
자릿수가(len) k보다 크지 않을때까지 기준숫자를 10 나눠주면서 구한다
놓쳤던 부분
코드
2020 KB
664 ms
#include <iostream>
int n, k;
void input_setting()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
std::cin >> n >> k;
}
long long numlen(long long num)
{
int i = 1;
while ((num /= 10) > 0)
++i;
return (i);
}
void solution()
{
long long len = 0;
int i;
for (i = 1; i <= n; i++)
{
len += numlen(i);
if (len >= k)
break ;
}
while (len > k)
{
i /= 10;
--len;
}
if (len == k)
std::cout << i % 10;
else
std::cout << -1;
}
int main(void)
{
input_setting();
input();
solution();
return (0);
}
C++
복사