새벽을 밝히는 붉은 달

[C] 백준 1065번: bool은 stdbool.h에! 본문

Online Judge

[C] 백준 1065번: bool은 stdbool.h에!

자윰 2020. 9. 5. 02:31

📎 백준 1065번 풀러 가기

 

1065번: 한수

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

www.acmicpc.net

문제

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

입력

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

출력

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


 

예전에 풀려고 했다가 포기하고, 이번에 다시 도전한 문제이다.

등차수열은 고등학교 때 배우기도 했고,

애초에 등차수열이란 개념 자체는 초등학생 때 규칙 찾기에서 배우기 때문에 어렵지 않았다.

 

다만, bool값을 사용하고 싶었는데, java에서는 boolean이라는 자료형으로 선언하면

바로 사용을 할 수 있기 때문에 C도 그렇겠지, 하고 bool cp; 라고 선언을 했는데

컴파일이 안 되는 것이다.

 

왜 그런가- 했더니 C에서 bool자료형은 stdbool.h 헤더를 선언해야 사용할 수 있다고 한다.

헤더를 추가했더니, 문제 없이 컴파일 되었고, 성공적으로 문제를 풀었다😊


아래는 내가 구현한 코드👇

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void AP(int num)
{   
    int cnt = 0;
    if (num < 100) cnt = num;
    else {
        cnt = 99;
        for (int i = 100; i <= num; i++) {
            int n1, n2, r, temp = i;
            bool cp = true;
            n1 = temp % 10;
            temp /= 10;
            n2 = temp % 10;
            r = n1 - n2;
            while (temp/10 != 0) {
                n1 = n2;
                temp /= 10;
                n2 = temp % 10;
                if (r != (n1 - n2)) {
                    cp = false;
                    break;
                }
            }
            if (cp) {
                cnt++;
            }
        }
    }
    printf("%d\n", cnt);
}

int main(void)
{
    int n;
    scanf("%d", &n);
    AP(n);

    return 0;
}

✍새로 안 사실들

1. C에서 bool 자료형은 <stdbool.h> 헤더를 선언해야 사용할 수 있다.

Comments