주어지는 숫자들의 전체 최소공배수를 구하면 되는 문제이다. 크게 어렵지 않다.
#include <string>
#include <vector>
#include <unordered_map>
#include <cmath>
using namespace std;
int solution(vector<int> arr) {
int answer = 1;
unordered_map<int, int> um;// 전체 최소 공배수들을 담아주는
for (auto num : arr) {
unordered_map<int, int> tmp;// 해당 숫자 공약수
while (num > 1) {
int i = 2;
for (; i<num; i++) {
if ((num / i) * i == num) break;
}
tmp[i]++;
num /= i;
}
for (auto c : tmp) {
um[c.first] = max(um[c.first], c.second);
}
}
for (auto c : um) answer *= pow(c.first, c.second);
return answer;
}