문제
자연수 N이 입력되면 1부터 N까지의 자연수를 종이에 적을 때 각 숫자 중 3의 개수가 몇 개 있는지 구하려고 합니다.
예를 들어 1부터 15까지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5으로 3의 개수는 2개입니다.
자연수 N이 입력되면 1부터 N까지 숫자를 적을 때, 3의 개수가 몇 개인지 구하여 출력하는 프로그램을 작성하세요.
입력설명
첫 줄에 자연수의 개수 N(3<=N<=1,000,000,000)이 주어집니다.
출력설명
3의 개수를 출력하세요.
입력예제
15
출력예제
2
#include <stdio.h>
using namespace std;
int main(){
//freopen("input.txt", "rt", stdin);
int n, left=1, right, result=0 , current, k=1;
scanf("%d", &n);
while(left != 0){
left = n / (k * 10);
current = (n / k) % 10;
right = n % k;
if(current > 3){
result += ((left + 1) * k);
} else if(current < 3){
result += (left * k);
} else{
result += (left * k) + (right + 1);
}
k = k * 10;
}
printf("%d", result);
return 0;
}
주어지는값이 234일때 우선 1의자리의 4를 기준으로 잡고 23을 left라는 변수에 담습니다.
4는 3보다 크기 때문에 첫번째 if문처럼 ((left+1) * k)을 합니다. 이후 반복문끝에 k*10을 해주면 10의자리로 기준이 바뀌게 됩니다.
current = 3, left = 2, right = 4 일경우 current는 3과 같기에 if문 3번째 로직이 실행됩니다. 이후 k * 10
current = 2, left = 0, right = 34 일경우 current는 3보다 작기에 if문 2번째 로직을 합니다.
'알고리즘 > it 취업을 위한 알고리즘 문제풀이' 카테고리의 다른 글
32. 선택정렬 (0) | 2021.05.20 |
---|---|
31. 탄화수소 질량 (0) | 2021.05.20 |
29. 3의 개수는? (small) (0) | 2021.05.19 |
28. N!에서 0의 개수 (0) | 2021.05.19 |
27. N!의 표현법 (1) | 2021.05.19 |