728x90
반응형
https://www.acmicpc.net/problem/1748
이런문제는 규칙을 찾는게 가장 중요합니다.
이렇게 해서 보면
처음 일의 자리는 10-1 == 9개
십의 자리들은 100-10 == 90 개
백의 자리들은 1000-100 == 900 개
여기서 120을 입력으로 주어진 경우 몇개의 자리일까요?
일의 자리는 갯수에 *1을 하면 되고
십의 자리느 갯수에 *2이런식으로 각 자리 별로 계산하면 되겠죠?
일단 120을 계산해보면
(9 * 1) +(90 * 2)+( (120-100+1) * 3)
( 9 ) + ( 180 ) + ( 63 ) = 252
100이 자리이면 입력된수에 자리수 만큼 뺀값에 +1 을 하면 갯수가 나오고 그 자리수의 갯수를 곱하는 식으로 하시면됩니다.
이런 방법도 있지만
이렇게 만들면 더 계산을 더 해야하니까 귀찮을 수도 있으니 다른 방법을 소개 해드리겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#include<stdio.h>
int main(void) {
int N;
scanf("%d", &N);
long long int ret = 0;
for (int i = 1; i <= N; i *= 10)
{
ret += N - i + 1;
}
printf("%d",ret);
return 0;
}
|
위와 같이 입력받은 숫자에 1, 10 , 100를 빼면서 +1을 해주면 길이를 구할수 있습니다.
한번 직접계산해보면서 왜 저런 수식이 나오는지 공부해보시면 도움이 많이 될것입니다.
감사합니다.
728x90
반응형
'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글
백준 1062 가르침 (0) | 2019.07.21 |
---|---|
백준 14391 종이 조각 (0) | 2019.07.21 |
백준 2669 직사각형 네개의 합집합의 면적 구하기 (0) | 2019.07.16 |
백준 2668 숫자 고르기 (8) | 2019.07.16 |
백준 17136 색종이 붙이기 (0) | 2019.07.12 |
댓글