반응형

문제 링크

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

 

 

풀이 1 )

  • 1~9까지는 한 자리
  • 10~99까지는 두 자리
  • 100~999까지는 세 자리
  • ...
  • 10^n~10^(n+1)-1까지는 n+1 자리
#include <iostream>

using namespace std;

int digit(int n){
    int ret = 1;
    while(n/=10)
        ret++;
    return ret;
}

int pow(int x, int n){
    if(n == 0)
        return 1;
    return x*pow(x, n-1);
}

int main(void){
    int n;
    cin >> n;

    int len = digit(n);

    if(len == 1){
        cout << n << '\n';
        return 0;
    }

    int ans = 0;
    for(int i = 1; i < len; ++i)
        ans += i*(pow(10, i)-pow(10, i-1));
    ans += len*(n-pow(10, len-1)+1);

    cout << ans << '\n';
}

 

풀이 2 )

  • 1의 자리 숫자는 1~n까지 모두 가지고 있으므로 총 n-1+1개
  • 10의 자리 숫자는 10~n까지 가지고 있으므로 n-10+1개
  • 100의 자리 숫자는 100~n까지 가지고 있으므로 n-100+1개
  • ...
  • 10^i 자리 숫자는 10^i~n까지 가지고 있으므로 n-10^i+1개
#include <iostream>

using namespace std;

int main(void){
    int n, ans = 0;
    cin >> n;
    for(int i = 1; i <= n; i *= 10)
        ans += n-i+1;
    cout << ans << '\n';
    return 0;
}

 

반응형

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

[C++] 백준 - 1027 : 고층 건물  (0) 2020.12.19
[C++] 백준 - 4375 : 1  (0) 2020.12.12
[C++] 백준 - 5373 : 큐빙  (0) 2020.12.09
[C++] 백준 - 14502 : 연구소  (0) 2020.12.09
[C++] 백준 - 9663 : N-Queen  (0) 2020.12.09

+ Recent posts