백준 1748 수 이어 쓰기 1
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 1748 수 이어 쓰기 1

by KyeongMin 2019. 7. 17.
728x90
반응형

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

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

이런문제는 규칙을 찾는게 가장 중요합니다.

이렇게 해서 보면

처음 일의 자리는 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
반응형

댓글