알고리즘/백준 BOJ 문제풀이

백준 1748 : 수 이어쓰기 1 (C++)

이것 저것 공부함 2021. 3. 9. 09:57

문제

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

1234567891011121314151617181920212223...

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

입력

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

출력

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

 

예제 입력 1

120

예제 출력 1

252

 

푸는사람마다 다르겠는데 일단 문제를 이해하는데 어렵지 않아서 적당한 시간에 풀었다.

노트에 문제를 적어 푸는데 반복적인 패턴을 찾아보면서 풀었다.. 

#include<iostream>
using namespace std;
int main(){
    int N;  cin>>N;
    int result=0,zari=1;
    int count=1;
    int temp=N;
    while(1){
        if(count<=temp && temp<count*10){
            result = result + N*zari;
            break;
        }
        else{
            N = N - 9 * count; // 9 90 900 9000 이런식 빼기
            result=result + 9*count*(zari++);
            count=count*10;
        }
    }
    cout<<result;
}

'알고리즘 > 백준 BOJ 문제풀이' 카테고리의 다른 글

백준 2563 : 색종이  (0) 2021.03.19
백준 1932 : 정수 삼각형  (0) 2021.03.15
백준 1068 : 트리 (C++)  (0) 2021.03.08
백준 2178 : 미로 탐색 (C++)  (0) 2021.03.04
백준 1260 : DFS와 BFS (C++)  (0) 2021.03.03