문제
자연수 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)이 주어진다..
💡 출력설명
첫 번째 줄에 숫자의 총개수를 출력한다.
💡 입력예제
15
💡 출력예제
21
코드
최종 풀이
#include <stdio.h>
int main() {
int n, i, j, sum = 0, cnt, tmp;
scanf("%d", &n);
for(i = 1; i <= n; i++) {
cnt = 1;
tmp = i / 10;
while(tmp > 0) {
tmp /= 10;
cnt++;
}
sum += cnt;
}
printf("%d", sum);
return 0;
}
설명
사용자로부터 n을 입력받고 1부터 n이하를 반복하는 for문을 작성한다.
1의 자리 자연수는 1개 이므로 for문을 돌때마다 cnt = 1로 초기화 하고 item을 10으로 나눈 몫을 tmp에 할당한다.
tmp가 0보다 클 경우 tmp를 10으로 나눈 몫을 다시 할당하고 cnt를 1씩 증가한다. 이후 tmp가 0이면 해당 while문에 빠져나가게 되고 해당 cnt값을 sum에 할당해나간다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.