반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

[백준 알고리즘/BOJ] 백준 1065번 한수 C++ 문제입니다.

 

 

1. 문제

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

 

2. 입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

 

<예제 입력>

110

 

 

3. 출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

 

<예제 출력>

99

 

4. 문제 풀이

위의 문제에서 보면 한수는 "각 자리수들이 등차수열을 이루는 수"를 말한다.
등차수열은 일정한 규칙이 있는 차이가 모두 일정한 수열을 말한다.

한 자리 수는 뒤의 숫자가 없기에  성립된다
두 자리 수도 세 번째 수가 없기에 성립된다.
세 자리 수는 등차수열이 이루어지지 않는 숫자들고 있기에 조건문을 확인한다.

 

5. 소스 코드

#include 

using namespace std;

int main(void)
{
    int input;
    int count=0;
    int A[4];
    cin >> input;
    for (int i = 1; i <= input; i++)
    {
        bool flag = true; //한수가 맞는지 확인
        int a = 0;
        int copy = i;
    
    while (copy)
    {
        A[a++] = copy % 10;
        copy /= 10;
    }

    //세자리 수 조건문
    if (a > 1)
    {
        int result = A[1] - A[0];
        //한수 판별
        for (int i = 2; i < a; i++)
        if (A[i] - A[i - 1] != result)
        {
            flag = false;
            break;
        }
    }

    //한수가 맞으면 count 증가
    if (flag) count++;
    }

    cout << count << endl;
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기