1065: 한수
2022. 1. 30. 22:42ㆍ문제연습/알고리즘
반응형
문제 해결 과정)
한수의 생성과정을 정확히 알고 있다면 판별 과정을 분리하여 함수 코드를 작성했을 것입니다.
count_HanSu()를 통해서 입력된 수의 범위에서 한수의 개수를 카운트하도록 하였고, check_Han()로 input number의 한수 여부를 판별하도록 하였습니다.
조금 더 깔끔한 코드를 짜고 싶으면, check_Han 내부의 자릿수를 분리하는 함수를 작성하면 보다 코드가 깔끔하지 않을까... 생각합니다.
#include <stdio.h>
void count_HanSu(int num);
bool check_Han(int num);
int main(){
int num;
scanf("%d",&num);
count_HanSu(num);
}
void count_HanSu(int num){ //한수의 개수를 카운트 하는 함수
int count = 0;
for(int i=1;i<=num;i++){
if(check_Han(i))
count++;
}
printf("%d", count);
}
bool check_Han(int num){ // 입력된 수가 한수인지 확인하는 함수.
int digit[4];
int r = num%10;
int q = num/10;
int i = 1;
digit[0] = r;
if(num<=10) // 입력한 수가 한자리일 경우 한수로 취급한다.
return true;
while(true){ //입력한 수의 각 자리수를 분리하여 배열에 저장한다.
if(q==0)
break;
r = q%10;
q = q/10;
digit[i++] = r;
}
for(int j=0;j<i-2;j++){ // 배열에 저장된 자리값의 차가 동일한지 확인한다.
if((digit[j]-digit[j+1]) !=
(digit[j+1]-digit[j+2]))
return false;
}
return true;
}
반응형
'문제연습 > 알고리즘' 카테고리의 다른 글
이코테 : 음료수 얼려먹기 (1) | 2022.11.04 |
---|---|
24416 : 알고리즘 수업 - 피보나치 수 1 (0) | 2022.10.27 |
4673: 셀프 넘버 (0) | 2022.01.16 |
11047: 동전 0(백준) (0) | 2022.01.07 |
2164: 카드 2(백준) (0) | 2021.09.29 |