본문 바로가기

코딩테스트/프로그래머스

[Level 2][C++] N개의 최소공배수

#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;
}