백준 1748 - 수 이어 쓰기 1

문제 링크

생각 및 접근

  • n으로부터 자릿수를 먼저 구했다.
      answer = n;
      while(answer != 0){
          answer /= 10;
          cnt++;
      }
  • 1의 자릿수부터 n의 자릿수 까지 만들 새 수의 길이를 차례차례 구한다.
    • i != cnt
      • (99 - 10 + 1) * 2
      • (999 - 100 + 1) * 3
      • (9999 - 1000 + 1) * 4
      • ...
      • (10 ^ k - 10 ^ (k - 1)) * k
    • i == cnt
      • (n - 10 ^ (cnt - 1) + 1) * cnt

코드

#include <bits/stdc++.h>
using namespace std;

int n, answer, cnt;

int main(){
    ios_base::sync_with_stdio(false);
    cin >> n;

    answer = n;
    while(answer != 0){
        answer /= 10;
        cnt++;
    }

    for(int i = 1; i <= cnt; i++){
        if(i == cnt)    answer += (n - pow(10, i - 1) + 1) * i;
        else            answer += (pow(10, i) - pow(10, i - 1)) * i;
    }

    cout << answer;
}

채점 결과

'Coding Test > acmicpc' 카테고리의 다른 글

백준 1074 - Z (c++)  (0) 2020.08.05
백준 14501 - 퇴사 (c++)  (0) 2020.08.05
백준 1339 - 단어 수학 (c++)  (0) 2020.08.04
백준 6064 - 카잉 달력 (c++)  (0) 2020.08.03
백준 1107 - 리모컨 (c++)  (0) 2020.08.02

+ Recent posts