반응형
1~N까지 숫자중 3의 개수
#include <iostream>
#include <algorithm>
#include <vector>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main() {
//3의 개수
int n,tmp,cnt=0;
scanf("%d",&n);
for(int i=1; i <=n; i++){
tmp = i;
while(tmp>0){
if(tmp%10==3) cnt++;
tmp/=10;
}
}
printf("%d",cnt);
return 0;
}
각 자리수에서 3이 있는지 없는지 판단한다.
직관적이지만 시간이 오래걸린다.
--------------------------------------------
빠르게 구하려면
각 자리수 별로 3의 개수를 구하고 더해준다
1의 자리가 3인 갯수
10의자리가 3인 갯수
100의자리가 3인 갯수
....
#include <iostream>
#include <algorithm>
#include <vector>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main() {
int n, lt=-1, cur, rt, k, res=0;
scanf("%d",&n);
while(lt!=0){
lt = n/(k*10);
cur = (n/k)%10;
rt = n%k;
//printf("%d %d %d\n",lt,cur,rt);
if(cur > 3) res+=(lt+1)*k;
else if(cur <3) res+=lt*k;
else res+=lt*k + (rt+1);
k = k*10;
}
printf("%d",res);
return 0;
}
5367
lt:536 cur:7 rt:0
537
lt:53 cur:6 rt:7
1077
lt:5 cur:3 rt:67
1645
lt:0 cur:5 rt:367
2645
2645
------
반응형
'Algorithm > etc' 카테고리의 다른 글
LRU( Least Recently Used) cpp 구현 (0) | 2022.01.06 |
---|---|
C++ 문자 배열에서 숫자 추출 (0) | 2021.12.27 |
N! 0의 개수 (0) | 2021.12.27 |
N! 표현법 (0) | 2021.12.27 |
숫자 뒤집기 cpp (0) | 2021.12.25 |