[백준] 1748번. 수 이어 쓰기 1

연성·2020년 11월 17일
0

코딩테스트

목록 보기
150/261

[백준] 1748번. 수 이어 쓰기 1

1. 문제

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

1234567891011121314151617181920212223...

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

2. 입력

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

3. 출력

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

4. 풀이

  • 1부터 N까지 각 수의 자리 수를 더 했다.

5. 처음 코드와 달라진 점

  • string으로 다 합친 다음에 str.size()를 이용하여 구하기
    -> 시간이 너무 오래 걸려서 안 함
  • 각 숫자를 string으로 변경하고 str.size()를 각 숫자마다 구해서 더하기
    -> 역시 오래 걸림
  • get_length() 함수를 구현하여 직접 각 자리수 구해서 더하기
    -> 오래 걸리긴 하는데 나오긴 하길래 제출했더니 통과

str.size()가 시간이 오래 걸리는 함수인 것 같다...

6. 코드

#include <iostream>

using namespace std;

int get_length(int n) {
    int len = 0;
    while (n>0){
        n /= 10;
        len++;
    }
    return len;
}

int main(void) {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    int n;
    cin >> n;
    
    long long answer = 0;
    for (int i = 1; i <= n; i++){
        answer += get_length(i);
    }
    
    cout << answer;
}

0개의 댓글