문제 해결/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를 구한 뒤 출력하였다.
반응형