문제

boj1037

N의 진짜 약수(자기 자신이랑 1을 제외한 약수)들이 주어질 때 N을 구하는 문제.

처음에는 진짜 약수들의 최소공배수를 구하는 것이라 착각했으나 2 4를 입력하는 경우 답이 4가 나오기 때문에 틀리다는 것을 알았다.

모든 약수는(제곱수 제외) pair를 갖고 자기와 pair를 곱하면 원래의 수를 구할 수 있기 때문에, 약수들을 sort한 다음 가장 작은 약수와 가장 큰 약수를 곱해주면 된다.

2 8 4가 주어진 경우에는 2 4 8로 sort해 2랑 8을 곱해 16을, 6 4 3 2가 주어진 경우에는 2 3 4 6로 sort해 2과 6을 곱해 12를 2가 주어진 경우에는 2와 2를 곱해 4를 얻는다.

#include <iostream>
#include <vector>
#include <algorithm> // sort
using namespace std;

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

	int num, i, tmp;
	cin >> num;

	vector<int> divisor;
	for (i = 0; i < num; i++) {
		cin >> tmp;
		divisor.push_back(tmp);
	}

	sort(divisor.begin(), divisor.end());

	int size = divisor.size();
	cout << divisor[0] * divisor[size - 1] << endl;
	return 0;
}