Algorithm/brute force

[백준] C++ 알고리즘 1748번 - 수 이어 쓰기 1문제

낭강 2021. 5. 30. 02:58
문제

https://www.acmicpc.net/problem/1748

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

소스코드
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n,len=0;
    cin >> n;
    int nt = n;
    
    while (n>0) {
        n /= 10;
        len++;
    }
    long long ans = 0;
    if (len == 1) {
        ans = nt;
        cout << ans;
        return 0;
    }
    ans = 9;
    for (int i = 2; i <= len; i++) {
        if (i == len) {
            long long endgame = (nt - pow(10, i - 1) + 1) * i;
            ans += endgame;
            cout << ans;
            break;
        }
        long long temp = 9 * pow(10, (i-1))*i;
        ans += temp;
    }


}
해설

자릿수를 계산해준다음, 마지막 자릿수전까지는 확정된 자리수가 있습니다.

1~9 = 1자리 -> 9개

10~99 = 2자리 -> 90*2 = 180개

100~999 = 3자리 -> 900*3 =2700개 요런식으로 계속 이어진다.

그리고 마지막 자리수에서는 전체를 검사하는게 아니라, n까지만 자리수를 계산해주면 되기때문에 i==len일때 따로 처리해준다.