백준
[C++] 백준 | 1790번 수 이어 쓰기 2
골드일
2023. 2. 15. 10:24
1790번: 수 이어 쓰기 2
첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다.
www.acmicpc.net
구현 문제이며, 수학적 감을 필요로 한다.
한 자리 수인 1 ~ 9는 9개
두 자리 수인 10 ~ 99는 90개
세 자리 수인 100~999는 900개
...
라는 점을 기반으로 구현해서 푼다.
이런 류의 수학적인 구현력이 많이 부족하다고 느꼈다.
생동성 시험을 하며 병원에서 피 뽑으면서 풀어서 집중하지 못했다.
결과적으로 오래 걸려서 아쉽다.
/*
https://www.acmicpc.net/problem/1790
백준 1790 수 이어 쓰기 2
*/
#include <iostream>
using namespace std;
int main() {
long long aa = 0, n,k,temp = 9, l = 1;
cin>>n>>k;
while(k > 0) {
k -= temp * l;
aa += temp;
temp *= 10;
l++;
}
temp /= 10;
k += temp * --l;
aa -= temp;
long long num = (k + l - 1)/ l, mod = (k + l - 1) % l;
long long m = aa + num;
if(m > n) cout<<-1;
else {
for(long long i = 0; i < l - mod - 1; i++) {
m /= 10;
}
cout<<m % 10;
}
}