오답노트

[브루트포스] BOJ 1748 수 이어 쓰기 1 본문

C,C++/코딩테스트

[브루트포스] BOJ 1748 수 이어 쓰기 1

권멋져 2022. 5. 4. 16:52
https://www.acmicpc.net/problem/1748
 

1748번: 수 이어 쓰기 1

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

www.acmicpc.net

- 문제 파악

임의의 숫자 N이 주어이고 그 수를 1부터 N까지 이어 붙혀 새로운 수를 만들 수 있다. 이 새로운 수의 자리수를 구하여라

 

- 정답

1. N 의 자리수를 nSize라고 할때, nSize -1 자리수까지는 1부터 10^nSize -2 이므로 모두 더한다.

2. 나머지  10^nSzie-1 부터 N까지는 nSize 자리수 가 N - 10^nSize -1 개 만큼 있으므로

nSize * (N - 10^nSize - 1)을 1번과 더한다.

 

 

#include "bits/stdc++.h"

using namespace std;

unsigned long long ans;

int main()
{
    string str;
    unsigned long long n;
    cin >> str;

    n = stol(str);

    int nSize = str.length();

    for (int i = 1; i < nSize; i++)
    {
        unsigned long long tmp = pow(10, i) - pow(10, i-1);
        ans += (tmp * i);
    }

    if(nSize > 1)
        ans += (nSize * (n + 1 - pow(10, nSize-1)));
    else
        ans += n;

    cout << ans;


}