문제
자연수 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;
}
}