알고리즘 문제풀기/인프런 강의 정답

12. 숫자의 총 개수 (large : 제한시간 1초) [코드구현력 기르기]

코다람쥐 2022. 3. 18. 13:23

나의 정답1. 시간복잡도 O(n)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char** argv) {

	//freopen("input.txt", "rt", stdin);
	
	int i = 0;
	int n;
	int cnt = 0;
	int comp = 10;
	int increment_size = 1;
	
	scanf("%d", &n);
			
	for(i = 1 ; i <= n ; i++){
		if(i % comp == 0)
		{
			comp *= 10;
			increment_size++;
		}			
		cnt += increment_size;
	}
		
	printf("%d", cnt);
}

// A 65, Z 90
// a 97, z 122

 

나의 정답2. 시간복잡도(log n)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char** argv) {

	//freopen("input.txt", "rt", stdin);
	
	int i = 0;
	int n;
	int temp;
	int sum = 0;
	int digit_num = 0;
	int min_num = 1;
	
	scanf("%d", &n);
	
	temp = n;
	while(temp > 0 ){
		temp /= 10;
		digit_num++;
	}		
			
	for(i = 0 ; i < digit_num - 1 ; i++){
		sum += 9 * min_num * (i + 1);
		min_num *= 10;		
	}
	
	sum += (n - min_num + 1) * digit_num;	
	printf("%d", sum);
}