본문 바로가기

백준

1748)수 이어 쓰기 1

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


1~N까지 각 수를 이어 붙여 새로운 수를 만들 수 있을 때 이 수의 길이를 찾는 문제다.


예를들어 N = 12라면 새로 만들어지는 수는 123456789101112 이다.


이 수의 길이를 구하기 전에 각 자리수들의 수를 세어보자.


1~9 : 9개

10~99 : 90개

100~999 : 900개


이제 N=12일때 새로 만들어진 수의 길이는 


1~9까지 9*1개 10~12 까지(12-10+1)*2개이다.


N=120이면 9*1+90*2+(120-100+1)*3개이다.


이것을 코드로 그대로 구현하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
 
int main() {
    int N;
    int temp;
    int cnt = 0;
    int num=0;
    int M=9;
 
    scanf("%d",&N);
    temp = N;
 
    while (temp > 0) {
        temp /= 10;
        cnt++;
    }
 
    for (int i = 1; i < cnt;i++) {
        num += M * i;
        M *= 10;
    }
    num += (N-M/9 +1)*cnt;
 
    printf("%d\n",num);
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

1057)토너먼트  (0) 2019.02.08
1094)막대기  (0) 2019.02.08
5212)지구 온난화  (0) 2019.02.07
2810)컵홀더  (0) 2019.02.06
5612)터널의 입구와 출구  (0) 2019.02.06