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