백준 2485 c++

magicdrill·2024년 3월 8일
0

백준 문제풀이

목록 보기
119/654

백준 2485 c++

#include <iostream>
#include <vector>

using namespace std;

int input(int lower, int upper);
void input_original_trees(vector <int>& tree, int tree_num);
void check_distance_trees(vector <int> tree, vector <int> &distance);
int find_GCM_vector(vector <int> distance);
int find_GCM(int A, int B);
int find_num_new_trees(vector <int> tree, int GCM);

int main(void)
{
	int N;
	int count = 0;
	int GCM;
	vector <int> original_tree;
	vector <int> distance;

	N = input(3, 100000);
	input_original_trees(original_tree, N);
	check_distance_trees(original_tree, distance);
	GCM = find_GCM_vector(distance);
	count = find_num_new_trees(original_tree, GCM);
	cout << count << "\n";

	return 0;
}

int input(int lower, int upper)
{
	int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void input_original_trees(vector <int> &tree, int tree_num)
{
	//cout << "input_original_trees" << endl;
	int i;
	int temp;
	
	for (i = 0; i < tree_num; i++)
	{
		temp = input(1, 1000000000);
		tree.push_back(temp);
	}

	return;
}

void check_distance_trees(vector <int> tree, vector <int>& distance)
{
	//cout << "check_distance_trees" << endl;
	int i;

	for (i = 0; i < tree.size() - 1; i++)
	{
		distance.push_back(tree[i + 1] - tree[i]);
	}

	return;
}

int find_GCM_vector(vector <int> distance)
{
	//cout << "find_GCM_vector" << endl;
	int i;
	int temp;

	temp = distance[0];
	for (i = 1; i < distance.size(); i++)
	{
		temp = find_GCM(temp, distance[i]);
	}

	return temp;
}

int find_GCM(int A, int B)
{
	//cout << "find_GCM" << endl;
	int temp;

	if (A < B)
	{
		temp = B;
		B = A;
		A = temp;
	}
	else
	{
		;
	}
	while (B != 0)
	{
		temp = A % B;
		A = B;
		B = temp;
	}

	return A;
}

int find_num_new_trees(vector <int> tree, int GCM)
{
	//cout << "find_num_new_trees" << endl;
	int i;
	int count = 0;
	int temp;

	temp = tree.front();
	while (temp != tree.back())
	{
		temp = temp + GCM;
		count++;
	}
	count = count - (tree.size() - 1);

	return count;
}

0개의 댓글