본문 바로가기

프로그래머스 풀이/Lv 2

프로그래머스 - N개의 최소공배수(C++)

728x90

https://tigerfrom2.tistory.com/70

 

유클리드 호제법(Euclidean algorithm) - 최대공약수, 최소공배수 알고리즘

최대공약수는 암호학에도 자주쓰이고 알고리즘 문제를 풀 때도 자주 등장합니다. 우리가 초등학교 때 배웠던 최대공약수 구하는 법은 ex) 4 8 이라 하면 두 수가 공통으로 나누어질 것 같은 수를

tigerfrom2.tistory.com

이 글을 참고!

 

어차피 몇개가 들어오던 

(1,2,3,4) 라고 하면 1, 2의 최소공배수 a, a와 3의 최소공배수 b, b와 4 의 최소 공배수 c 라고 순차적으로 구해나가면 그게 정답이다. 수학적 증명은 하지않았지만 뭐 맞았다.

 

#include <string>
#include <vector>

using namespace std;

int gcd(int a, int b) {
	if (b == 0) return a;
	else return gcd(b, a % b);
}

int lcm(int a, int b) {
	return a * b / gcd(a, b);
}
int solution(vector<int> arr) {
    int answer = 0;
    
    if(arr.size() == 1)
        return arr[0];
    else{
        int tmp = lcm(arr[0], arr[1]);
        for(int i = 2; i < arr.size(); i++){
            tmp = lcm(tmp, arr[i]);
        }
        answer = tmp;
    }
    
    return answer;
}