Search
Duplicate
📒

수 이어 쓰기 2

주차
21
문제번호
1790
언어
티어
실버
유형
이분탐색
nj_Blog
nj_상태
이해도
66%
풀이
사람
이해도 2
13 more properties

문제접근

이분탐색은 도저히 모르겠어서 구현으로..
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++
복사