문제
풀이
만약 N = 130 이라면
1) 1 ~ 9 → 9
2) 10 ~ 99 → (99 - 10 + 1) * 2
3) 100 ~ 130 → (130 - 100 + 1) * 3
처럼 수의 자리수별로 나눌 수 있다.
즉, 1) + 2) + 3) 을 하면 구하고자하는 수의 자릿수를 구할 수 있다.
문제점
풀이 처럼 for문이 반복 될 때 마다 ans의 값을 계속 더했어야 하는데 대입만 해서 다른 결과가 나와 틀렸다는 결과가 나왔다.
반드시 더하는지 대입하는지 한번 더 체크를 하자...
코드
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
long long ans = 0;
int n, end;
cin >> n;
for (int start = 1, len = 1; start <= n; start *= 10, len++)
{
end = start * 10 - 1;
if (end > n)
{
end = n;
}
ans += (long long)(end - start + 1) * len;
}
cout << ans << "\n";
}
결과
'알고리즘 > 백준' 카테고리의 다른 글
[C++] 백준 15649번 : 다음 순열 (0) | 2020.04.17 |
---|---|
[C++] 백준 15649번 : N과 M (3) (0) | 2020.04.17 |
[C++] 백준 15649번 : N과 M (2) (0) | 2020.04.17 |
[C++] 백준 15649번 : N과 M (1) (0) | 2020.04.17 |
[C++] 백준 6064번 : 카잉 달력 (0) | 2020.04.16 |