백준 문제풀이/SILVER

[백준 / BOJ / SILVER 3] 1748 번 : 수 이어쓰기 1

지나가던 개발자 2020. 3. 1. 21:17
반응형

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

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

문제 접근 방법

  • 새로운 수의 자릿수 = 1부터 N까지의 전체 자릿수를 더한것과 같다.
  • 1부터 N까지 1의자리 갯수 + 10의자리 갯수 + 100의 자리 갯수 + ... + 10의 n승 자리 갯수들을 더한다.

아래는 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    int N, ans = 0 ,count = 1;                 // 자릿수 체크를 위한 count
    cin >> N;
 
    while (count <= N)
    {
        ans += (N - count + 1);                // N이 1부터 N 까지 1의 자리수의 갯수는 N-1+1           ex) 123 의 1의자리 갯수는 123개
        count *= 10;                         // N이 1부터 N 까지의 10의 자리의 갯수는 N -10 + 1     ex) 123 의 10의자리 갯수는 114개 (10~99) 90개 + (100~123) 24개
   }                                         // 점화식은 N-(10의n승) + 1 n은 0부터 시작
 
    cout << ans << endl;
 
    return 0;
}
Colored by Color Scripter
 
반응형