728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에 N(1≤N≤100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
소스코드
#include <iostream> #include <math.h> using namespace std; int main(void) { int n, su = 1; long long cnt = 0; cin >> n; while (pow(10, su) <= n) { cnt += su * (pow(10, su) - pow(10, su - 1)); su++; } if (pow(10, su) - n >= 0) cnt += su * (n - pow(10, su - 1) + 1); cout << cnt; }
Tip
무식하게 구하는 방식으로도 풀 수 있을지 모르겠다. 반복문을 1억회 돌리면 1초를 넘는다고 보는 편이라서, 아슬아슬하게 통과하는 것보다는 더 나은 방법을 선택하는 것이 좋다. 기본적으로 10의 단위로 알고 싶은 숫자의 자리수에 도달할 때까지 계속 계산하고 그 후에 남은 케이스를 정리해주는 방식으로 접근했다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 1010 - 다리 놓기 (0) | 2018.03.05 |
---|---|
백준] 5026 - 박사 과정(ACM-ICPC Regional) (0) | 2018.03.04 |
백준] 11404 - 플로이드 (0) | 2018.03.03 |
백준] 10474 - 분수 좋아해?(ACM-ICPC Regional) (0) | 2018.03.03 |
백준] 10158 - 개미(KOI 2014 지역본선) (0) | 2018.02.21 |