숫자의 총 개수

김보현·2021년 12월 23일
0

코딩테스트

목록 보기
3/26

숫자의 총 개수 (제한시간 1초)

1부터 15까지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5 -> 총 21개

입력

자연수 N (3<=N<=100,000,000)

출력

숫자의 총 개수

입력된 N이 작은 경우 -> 타임아웃 가능

#include<iostream>

using namespace std;

int main() {
	int n, count=0;
	cin >> n;

	for (int i = 1; i <= n; i++) {
		if (i < 10) {
			count++;
		}
		else {
			int temp = i;
			while (temp > 0) { //10 이상인 경우 자리수 나누기
				count++;
				temp /= 10;
			}
		}
	}
	cout << count << endl;

	return 0;
}

풀이

한자리수: 9 -> 9개
두자리수: 99 -> 2x(99-9)개
세자리수: 999 -> 3x(999-99)개

N의 자리수보다 한 자리 작은 수까지의 개수를 센 후 남은 수만큼 더해주기

#include<iostream>

using namespace std;

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

	int count = 0;//숫자 개수
	int times = 1;//자리수
	int compare = 0; //0,9,99,999...
	int num = 9; //9,90,900... -> 자리수 마다의 수의 개수

	while (compare+9 < n) {
		compare += num;

		count += (num * times);

		times++;
		num *= 10;
		
	}

	count += (n - compare) * times; //개수가 남은 경우 더해주기

	cout << count << endl;

	return 0;

}
profile
📈어제보다 조금 더 성장하는 오늘을 위해

0개의 댓글