[BOJ]1748 수 이어 쓰기1

브루트 포스 예제

Posted by kyoungIn on December 28, 2018

수 이어 쓰기 1

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 2766 1514 1318 58.918%

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223…

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 새로운 수의 자릿수를 출력한다.

예제 입력 1 복사

1
120

예제 출력 1 복사

1
252

풀이

알고리즘을 생각해내고, 문제를 풀고, ‘틀렸습니다’ 끝에 ‘맞았습니다!!’를 보면 기분이 정말 좋다.

그러곤 다른 사람들의 코드를 보는데, 나보다 훨씬 효율적으로 짠 코드를 볼때면 아.. 진짜 대단한 사람들이 많다 나는 너무 부족하다를 뼈저리게 느낀다 ㅠㅠ,, 다른 사람들의 코드를 보는 것도 실력향상에 좋다는데 가끔은 우울해진댜,,,, 다들 넘잘해

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "math.h"
using namespace std;
int main(){
    int sum[10]= {0,};
    int i, n, result=0;
    cin >> n;
    
    sum[0]=0;
    for(i=1;i<10;i++){
        sum[i]=9*pow(10,i-1)*i + sum[i-1];
    }
    for(i=10;i>=0;i--){
        if(n>=pow(10,i)){
            result = n-pow(10,i)+1;
            result =result*(i+1) + sum[i];
            cout << result;
            return 0;
    }
} //int main()