Ye0ngJae

[BOJ] 10872번 "한수" C언어 풀이 본문

알고리즘/C언어

[BOJ] 10872번 "한수" C언어 풀이

Ye0ngJae 2022. 4. 14. 11:04
728x90

문제

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

입력

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

출력

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


입력 예시

110

 

1

 

210

출력 예시

99

 

1

 

105

답안

더보기

코드

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main() {

	int arr[3];
	int input, k, n, count; 

	scanf("%d", &input);

	for (int i = 1; i <= input; i++) {
		if (i < 100) 
			count = i;
		else if (i == 1000) 
			break;
		else {
			k = 0; n = i;
			while (n > 0) {
				arr[k] = n % 10;
				n /= 10; 
				k++;
			}
			if (arr[0] - arr[1] == arr[1] - arr[2]) 
				count++;
		}
	}
	printf("%d", count);

	return 0;
}

풀이

한수는 각 자리수들이 등차수열을 이루는 수이다. 예를 들어 543이라는 숫자를 보자 543은 5 4 3 이라는 숫자로 나누어 볼 때 이 숫자들은 1이라는 차 일정한 차를 이루고 있다. 우리는 이를 한수라고 부른다. 한수는 100 이하의 경우에는 받은 값 그대로가 한수이기 때문에, 100이하의 경우 해당 값을 그대로 출력한다.

=> 2자리 수까지는 입력 받은 값이 한수이다. 

 

일단 input 변수를 이용하여 자연수 N을 입력받고, for문을 돌며, 1부터 N까지 반복하면서 while 문을 통해 arr 배열에 n을 10으로 나눈 나머지를 저장하고 n을 10으로 나눈다. 그리고 이 수들을 arr 배열에 저장하여 각 자리수가 등차수열을 이루는 지 확인하고 등차수열이 맞으면, count++을 한다. 

 

for문을 모두 둘았으면 count 변수를 출력하여,1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

 

728x90