티스토리 뷰

알고리즘(C++)/백준 알고리즘

1065번 : 한수

개발하는꼬물이 2018. 5. 3. 16:53

1. 문제 요약

   어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라 한다.

   등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 

   같은 한수의 개수를 출력하는 프로그램을 작성하시오. (0 < N <= 1000)


2. 예제 입력

110


3. 예제 출력

99


4. 코드 

#include <iostream>
using namespace std;

int CountNum(int n)
{
	
	int pos[3] = { 0 };  // 자릿수를 저장할 변수
	int count = 0; // 한수의 갯수

	if (n < 100)
		count = n; // 1자리수, 2자리수는 모두 비교 대상이 없어서 한수로 인정
	else
	{
		count = 99;

		for (int i = 100; i <= n; i++)
		{
			if (i == 1000)
				return count;

			pos[0] = i / 100;   // 100의 자리
			pos[1] = (i - pos[0] * 100) / 10;  // 10의 자리
			pos[2] = i % 10;  // 1의 자리

			if ((pos[0] - pos[1]) == (pos[1] - pos[2]))
			{
				count++;
			}
		}
	}

	return count;
}

int main()
{
	int num;
	int result = 0;
	cin >> num;

	if (num <= 0 || num > 1000)
		return -1;

	result = CountNum(num);

	cout << result << endl;

    return 0;
}



'알고리즘(C++) > 백준 알고리즘' 카테고리의 다른 글

2750번 : 수 정렬하기  (0) 2019.01.22
11654번 : 아스키코드  (0) 2018.05.03
4673번 : 셀프 넘버  (0) 2018.04.17
15552번 : 빠른 A+B  (2) 2018.04.17
1110번 : 더하기 사이클  (0) 2017.11.19
댓글