hyunjin

[1065]한수 본문

알고리즘 연습/백준

[1065]한수

_h.j 2019. 5. 17. 13:10
728x90

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

 

1065번: 한수

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

www.acmicpc.net

 

문제

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

입력

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

출력

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

 

 

 

 

<풀이>

전략

일단 99이하 수는 무조건 한수

각 자리 나누고

 

어떤 함수를 만들까->고민되네 그냥 함수로 하나로 끝내나

그냥 입력된 수(n) 인자로 넘기면

1~n까지 한수인지 count

한수 판별

2개 함수 필요

아니면 한수 판별만 두고 for문 자체를 main에 그냥 넣는 방법도 있다.

 

<코드>

#define _CRT_SECURE_NO_WARNINGS
#include
#include
typedef unsigned char Bool;
#define True 1
#define False 0

Bool isHanNum(int);
int countHanNum(int);

int main(void) {
int number;
scanf("%d", &number);
if (number < 100)
printf("%d", number);
else
printf("%d", countHanNum(number));
return 0;
}
Bool isHanNum(int num) {
Bool flag=False;
int commonDiff[2],number[4];

for (int i = 0; num;i++) {//자리수 분리해서 넣어놓기
number[i] = num % 10;
num /= 10;

if (i >=2) {//공차 구하기
commonDiff[0] = number[i - 1] - number[i - 2];
commonDiff[1] = number[i] - number[i - 1];

if (commonDiff[0] != commonDiff[1]) break;
else flag = True;
}
}
return flag;
}
int countHanNum(int num) {
int count = 99;
for (int i = 100; i <= num;i++) {
if (isHanNum(i)) count++;
}
return count;
}

 

 

 

<C에서 bool type은???>

c언어에서는 true,false 자료형이 없다.

그래서 그냥 int 0,1로 하던지

아니면!

https://aoikazto.tistory.com/entry/C%EC%96%B8%EC%96%B4-%EA%B0%95%EC%A2%8C-%EC%A0%9C-12%EA%B0%95-Bool-%EB%85%BC%EB%A6%AC%ED%98%95-%EC%9E%90%EB%A3%8C%ED%98%95%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90 참고

 

먼저 Bool 타입을 만들어 낼것이다.

typedef로!

unsigned char은??

부호 없는 char형! -> char 1byte 최대 256이니까 우린 0,1만 필요하므로 괜찮다

또는!!! typedef말고

#define Bool unsigned char로 해도 같은 결과!

 

728x90

'알고리즘 연습 > 백준' 카테고리의 다른 글

[2748] 피보나치수2  (0) 2020.08.05
[1149]RGB거리  (0) 2019.09.22
[11721]열 개씩 끊어 출력하기  (0) 2019.05.16
[11720]숫자의 합 -> 실패  (0) 2019.05.16
[2441]별찍기4  (0) 2019.05.15