코딩테스트/프로그래머스
[Level 2][C++] N개의 최소공배수
MJ.Lee
2024. 10. 1. 12:48
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> arr) {
//제일 큰 수를 알기 위해 정렬.
sort(arr.begin(), arr.end());
int answer = 1;
//제일 큰 수 (arr.back())은 아래 반복문의 결과에 따라 바뀐다.
for (int i = 2; i <= arr.back(); i++)
{
bool multiply = false;
for (int j = 0; j < arr.size(); j++)
{
//다 나누어진 숫자는 건너 뛴다.
if (arr[j] == 1)
continue;
if (arr[j] % i == 0)
{
multiply = true;
arr[j] /= i; //나뉘어지면 나뉜 애로 저장. 이 과정에서 배열 내 숫자들이 변환.
}
}
if (multiply)
{
answer *= i;
multiply = false;
i = 1; //나뉘어 졌으면 i=2부터 다시 돌게 하기 위해 i=1로 저장. (반복문 돌면 2로 바뀜)
sort(arr.begin(), arr.end()); //다시 정렬 ->맨위 arr.back()에도 영향을 줌.
}
}
return answer;
}