1065번 - 한수 ( 백준 알고리즘/c++ )

상세 컨텐츠

본문 제목

1065번 - 한수 ( 백준 알고리즘/c++ )

본문

 

1065번: 한수

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

www.acmicpc.net

문제 : N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가

일정한 수열을 말한다.

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

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

 

 


#include<iostream>
using namespace std;
int check(int n)
{
	int count = 0, hund, ten, one;
	if (n < 100)
		return n;
	else {
		for (int i = 100;i <= n;i++)
		{
			hund = i / 100;
			ten = (i % 100) / 10;
			one = (i % 100) % 10;
		
		if ((hund - ten) == (ten - one))
			count++;
		}
		return (99 + count);
	}
}
int main()
{
	int input = 0;
	cin >> input;
	cout << check(input) << endl;

	return 0;
}​

중요 포인트

  • 한수의 의미 파악 (한자리와 두 자리를 가진 숫자는 그냥 카운트하면 됨)
  • 입력된 수의 자리 수 파악 및 차이 파악 필요

한수는 어떤 정수의 자리수가 등차수열을 이루는 수입니다. 

- 입력된수 : 1 
  예제에서 주어진 1 같은 경우 한자리에 불과해서 1로 출력이 됩니다.

- 입력된수 : 100
   마찬가지로 입력이 100으로 입력되었을 때 십의 자리 모두 비교할 다른 자리가 없기 때문에 모두 카운트가 되며
   100이후 부터 한수 파악이 시작되는데 100은 자리의 각 수가 등차수열을 이루지 못하므로 99가 나오게 됩니다.

- 입력된수 : 210
   210 까지 각 자리의 수가 등차수열을 이루는 한수는 111,123,135,147,159,210 ( 6개 )  + 100미만의 수들 (99개)
   = 105개가 됩니다. 


main 문에서는 키보드로 수를 입력받게 됩니다. 
그리고 특정 함수로 들어가게 되는데 100미만의 조건일 경우 곧바로 return 됩니다. ( 2 자릿수는 한수가 없다 )

100 이상일 때 자릿수를 파악하고 각 자릿수의 차이가 동일할 경우 for 반복문을 100부터 시작하여 입력받은 n까지 체크하면서 카운트가 올라갑니다.

후에 카운트가 다 되면 기존의 "99"+"카운트 된수"의 결과를 리턴하고 출력하게 되어 종료합니다.

728x90
반응형

관련글 더보기

댓글 영역