알 수 없는 사용자 2023. 7. 16. 21:47

문제풀이

숫자 하나에 대응하는 판별을 위해 bool 타입 함수를 만든다. 함수는 단순히 3자리수이고 각자리수의 간격이 같은지 확인하면 되는 단순한 함수이다. 이떄 두자리수는 간격이 하나이기 때문에 한수라고 볼 수 있다. 존재하는 모든 수에 대하여 함수를 수행하며 함수는 각 자리수를 비교하는 수행을 하여 O(n) 복잡도(함수 내부 복잡도 약 O(3) 정수배 관용 )를 가진다. 

#include <iostream>

using namespace std;

bool GAB(int A){
    
    int num[3];
    if(A < 100) return true; //두자리 수라면 간격이 하나이기때문에 한수이다.

    for(int i = 0 ; i < 3 ; i++){
        num[i] = A % 10;
        A /= 10;
    }
    
    if( num[2]-num[1] == num[1]-num[0] )return true;//자리값의 차이를 확인한다.
    return false;
}
int main(){

    int N; 
    int ans = 0;
    cin >> N;
    for(int i =1; i <= N && i < 1000; i++) if(GAB(i))ans++; 
    //1000인경우는 한수가 아니기 때문에 확인하지 않는다.
    cout << ans;

    return 0;
}