본문 바로가기

코딩테스트/Level1

숫자의 총 개수

문제

자연수 N이 입력되면 1부터 N까지의 자연수를 종이에 적을 때 각 숫자는 몇 개 쓰였을까요?
예를 들어 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이 입력되면 1부터 N까지 각 숫자는 몇 개가 사용되었는지를 구하는 프로그램을 작성하세요.
첫 번째 줄에는 자연수 N(3<=N<=100,000,000)이 주어진다.

입력 예제
15

출력 예제
21

public class problem11 {

	public static void main(String[] args) {
		int input = 15;
		int result = method(input);
		
		System.out.println(result);
	}
	
	//첫 번째 답: 효율성 안좋음
	public static int method(int input) {
		int cnt = 0;
		
		for(int i = 1; i<=input; i++) {
			int num = i;
			while(num>0) {
				cnt++;
				num = num/10;
			}
		}		
		
		return cnt;		
	}
	
	//두 번째 답: 효율성 좋음
	public static int method2(int input){
		int result = 0;
		int num = 9;   //1의 자리면 1~9까지. 
		int count = 1; //자리수
		
		while(input > num) {			
			//9보다 크면 1*9, 90보다 크면 2*90, 900보다 크면 3*900
			result += 9*count;						
			num *= 10;
			count++; //자리수 증가			
		}		
		
		//ex) 4321이면 4321-999개만큼 4자리 수가 존재. 4*(4321-999)
		result += count*(input-result);  
				
		
		return result;	
	}
	
}

'코딩테스트 > Level1' 카테고리의 다른 글

뒤집은 소수  (0) 2022.02.09
가장 많이 사용된 자릿수  (0) 2022.02.09
자릿수의 합  (0) 2022.02.09
모두의 약수  (0) 2022.02.09
올바른 괄호  (0) 2022.02.09