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 |