궤도

[백준] 1065번 : 한수 본문

💻 현생/⛓ 알고리즘

[백준] 1065번 : 한수

영이오 2020. 10. 13. 15:38

문제

 


풀이

 

1,000 이하 라고는 하지만 1,000은 한수가 아니다. 그리고  1~99는 무조건 한수다. 그렇다면 세자리 수에 대해서만 한수여부 체크를 하면 된다. 세자리 수를 셋으로 쪼갠다. (part[0], part[1], part[2]) 그리고 (part[0]-part[1])==(part[1]-part[2]) 인지 확인하는데, 이거 말고 등차수열의 성질을 이용해서 2*part[1]==part[0]+part[2] 인지 확인해도 상관없다.


소스코드

 

#include <iostream>
using namespace std;

bool isHan(int n) {
	int part[3];

	if (n < 100) //100미만이면 무조건 한수
		return true;
	else if (n == 1000) //1000은 안됨
		return false;
	else { //3자리 숫자들 한수인지 체크
		for (int i = 0; i < 3; i++) { //쪼갬
			part[i] = n % 10;
			n /= 10;
		}
		if ((part[0] - part[1]) == (part[1] - part[2])) //체크
			return true;
		else
			return false;
	}
}

int main() {
	int N, count = 0;

	cin >> N;
	for (int i = 1; i <= N; i++) {
		if (isHan(i))
			count++;
	}
	cout << count << endl;
}
Comments