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;
    }
}

 

+ Recent posts