CodingTest Exam/[C++] Algorithm Study

12. 숫자의 총 개수(large) (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★★★☆☆

HongongHB 2023. 7. 21. 22:16

#include<stdio.h>
#include<cmath>

int main(){
	int a;
	scanf("%d", &a);
	
	int sum = 0; // 자릿수에서 사용하는 숫자의 개수
	int c = 1; // 자릿수
	int d = 9; // 1-9, 10-99, 100-999
	int result = 0; // 총 합
	
	while(sum + d < a){
		result += (c*d);
		sum = sum + d;
		c++;
		d *= 10;
	}
	
	result += (a - sum) * c;
	
	printf("%d", result);
	
	return 0;
}

1. 1의 자리수에서 총 사용하는 숫자의 개수는 1~9 까지 총 9개이다. (c = 1, d = 9, c * d = 9) 이후 c++; (자리수 증가)

2. 10의 자리수에서 총 사용하는 숫자의 개수는 10~99까지 총 90개 * 숫자 2자리 = 180개이다. (c = 2, d = 90, c * d = 180)

3. 만약 입력값 a가 256일 때, while 문은 99 + 900(d * 10 * 10) < 256 일 때 멈추므로 이후 계산은 256 - 99(1부터 99까지) = 157 * 3(c, 자리수) = 471을 result에 더해준다.

 

첫 점수 : 20점