[백준/BOJ] 백준 1065번 : 한수

2020. 6. 1. 20:25알고리즘 문제풀이

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

 

1065번: 한수

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

www.acmicpc.net

1부터 N까지 한수의 개수를 찾아내는 완전 탐색(브루트 포스) 문제이다.

1부터 N까지 한수인지 아닌지를 파악해 개수를 센다.

 

코드

#include <iostream>
#include <string>
using namespace std;

bool check(string num) //한수인지를 체크한다.
{
	bool ret = true;

	int num1;
	int num2;
	int num3;

	if (num.size() < 3)//두자릿수 이하라면 모두 한수이다.
		return ret;

	for (int i = 0; i < num.size() - 2; i++)
	{
		//substr로 한 부분을 나타내고, stoi로 문자열을 숫자로 만든다.
		num1 = stoi(num.substr(i, 1)); 
		num2 = stoi(num.substr(i + 1, 1));
		num3 = stoi(num.substr(i + 2, 1));

		//한수가 아닐때
		if (num1 - num2 != num2 - num3) 
		{
			ret = false;
			break;
		}
	}

	return ret;
}

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

	int n;
	int cnt = 0; //개수

	cin >> n; // 자연수 n을 입력받는다.

	for (int i = 1; i <= n; i++) //1이상, n이하 수를 체크한다.
	{
		if (check(to_string(i)))
			cnt++;//만약 i가 한수라면 개수를 추가한다.
	}

	cout << cnt;


	return 0;
}

문자열을 사용함으로써, 각 자리의 숫자를 파악해 한수인지를 파악하였다.