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일때 따로 처리해준다.