알고리즘/문제 풀이

1065번: 한수

Themion 2021. 12. 6. 17:17

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

한 자리 수와 두 자리 수는 각 자리 수의 차가 일정하므로 반드시 한수이다.

또 세 자리 수는 브루트포스로 판정이 가능하고, 1000은 한수가 아님이 자명하므로

입력이 두 자리 수 이상이라면 브루트포스로 정답을 출력할 수 있다.

#include <cstdio>

int main() {
    // input: 한수의 개수를 계산할 범위, ans: 범위 내의 한수의 개수
    int input, ans = 99;
    scanf("%d", &input);

    // 한 자리 수는 길이 1짜리 수열이고, 두 자리 수는 길이 2짜리 수열이다
    // 길이가 2 이하인 수열은 각 수의 차가 일정하므로 반드시 한수이다
    // 따라서 input <= 99라면 범위 내의 수는 반드시 한수이다
    if (input <= 99) ans = input;

    // 세 자리 수는 완전 탐색을 통해 범위 안의 수가 한수인지 판정
    else for (int i = 100; i <= input; i++) 
        if ((i / 100 - (i / 10) % 10) == ((i / 10) % 10) - i % 10) 
            ans += 1;

    //한수의 개수를 출력
    printf("%d\n", ans);

    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

1085번: 직사각형에서 탈출  (0) 2021.12.06
1074번: Z  (0) 2021.12.06
1049: 기타줄  (0) 2021.12.06
1043번: 거짓말  (0) 2021.12.06
1041번: 주사위  (0) 2021.12.06