알고리즘/백준

[백준][C++] 1065: 한수

KANTAM 2024. 5. 4. 18:09

문제

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

풀이

수학, 브루트포스 알고리즘

 

  • 입력되는 수는 1000 이하의 수이다. 
  • 100 미만의 수는 모두 한수를 이루기 때문에, 100 미만의 수가 들어온다면 N을 출력한다.
    • 0 ~ 9까지의 수는 그 자체로 등차수열이다.
    • 10 ~ 99까지의 수는 수열을 이루는 수가 2개이기 때문에 등차수열이다.
  • 100 이상의 수가 들어온다면 100부터 N까지 아래의 검사를 실시하여, 통과된 개수를 출력한다.
    • 현재 수의 각 자리수를 구한다. 
    • 연속된 자리수 사이의 차이가 일치한다면 한수이다. 

코드

#include <iostream>

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;

	int answer = 0;

	// 100 미만의 수는 모두 한수이다.
	if (N < 100)
	{
		answer = N;
	}
	else
	{
		answer = 99;

		// 연속된 자리수 사이의 차이가 일치한다면 한수이다.
		for (int current = 100; current <= N; ++current)
		{
			int hun = current / 100;
			int ten = (current / 10) % 10;
			int one = current % 10;

			if ((hun - ten) == (ten - one))
			{
				answer++;
			}
		}
	}

	cout << answer;

	return 0;
}