코딩테스트/Baekjoon

[백준 #1065] 한수 (C++)

동띵 2021. 9. 20. 14:12

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

 

1065번: 한수

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

www.acmicpc.net

 

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

 

두 자릿수는 10의 자리와 1의 자리뿐이라

등차수열인지 판단할 수 없으므로 모두 한수이다.

따라서 입력한 n이 100보다 작으면 한수의 개수는 n 개이다.

 

n이 100보다 크다면, 한수는 99 + (100부터 n 사이에 한수의 개수) 개일 것이다. 

100 이상일 경우 한수인지 판단하기 위해 100의 자리, 10의 자리, 1의 자리 수를 구하고,

100의 자릿수와 10의 자릿수의 차와 10의 자릿수와 1의 자릿수의 차를 비교했다.

 

만일 차가 같다면 자릿수가 등차수열을 이루기 때문에 한수라고 볼 수 있다.

이런 경우 cnt에 1을 더해가며 한수의 개수를 세었다. 

 

for 문을 통해 100부터 n까지 한수인지를 판별하여 개수를 세고 99+cnt를 리턴해주었다.

 

#include <iostream>
using namespace std;

int han(int n) {
	int cnt = 0;

	if (n < 100) {
		return n;
	}
	else {
		for (int i = 100; i <= n; i++) {
			int hund = i / 100;
			int ten = (i % 100) / 10;
			int one = (i % 100) % 10;

			if ((hund - ten) == (ten - one)) {
				cnt++;
			}
		}
		return 99 + cnt;
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int n, result;
	cin >> n;

	result = han(n);
	cout << result;

	return 0;
}