본문 바로가기
알고리즘/백준

[C++] 백준 1748번 : 수 이어쓰기 1

by 컴공맨 2020. 4. 16.
 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net


문제


풀이

만약 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";
}

결과


 

 

pyo7410/Study

Contribute to pyo7410/Study development by creating an account on GitHub.

github.com

 

'알고리즘 > 백준' 카테고리의 다른 글

[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