문제 해결/BaekJoon

[백준] [C++] 1037번 약수

WSLim_97 2023. 1. 11. 20:57
반응형

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

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net


코드

#include <iostream>
using namespace std;

long long FindMax(long long arr[], int count);
long long FindMin(long long arr[],int count);

const int COUNT = 50;

int main()
{
	int n;
	long long arr[COUNT] = { }, input, max, min;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> input;
		arr[i] = input;
	}

	if (n <= 1)
		cout << arr[0] * arr[0] << endl;
	else if (n == 2)
		cout << arr[0] * arr[1] << endl;
	else
	{
		max = FindMax(arr, n);
		min = FindMin(arr, n);

		long long result = max * min;
		cout << result << endl;
	}

	return 0;
}

long long FindMax(long long arr[], int count)
{
	long long maxValue = -1;
	for (int i = 0; i < count; i++)
	{
		if (arr[i] > maxValue)
			maxValue = arr[i];
	}

	return maxValue;
}

long long FindMin(long long arr[], int count)
{
	long long minValue = 1000001;
	for (int i = 0; i < count; i++)
	{
		if (arr[i] < minValue)
			minValue = arr[i];
	}

	return minValue;
}

풀이

어떤 자연수 result의 진짜 약수가 주어질 때 해당하는 자연수를 구하는 문제이다.

 

result의 값은 2 <= result <= 1,000,000 이기에 long long 타입으로 선언하였다.

 

result 값을 찾기 위해서 진짜 약수들이 주어질 때 가장 작은 값과 가장 큰 값을 곱하면 result 값이 나온다고 생각하여 입력값에서 최댓값을 찾는 FindMax 함수와, 입력값에서 최솟값을 찾는 FindMin 함수를 작성하여 사용하였다.

 

최댓값 max와 최솟값 min을 곱하여 최종값인 result를 구한 뒤 출력하였다.

반응형