Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] N개의 최소공배수 (C++) 본문

Problem Solving

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

흑개 2021. 11. 11. 16:29

https://programmers.co.kr/learn/courses/30/lessons/12953

 

코딩테스트 연습 - N개의 최소공배수

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배

programmers.co.kr

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int gcd(int a, int b){
    int a1=max(a,b);
    int b1=min(a,b);
    while (b1){
        int c=a1%b1;
        a1=b1;
        b1=c;
    }
    return a1;
}

int lcm(int g, int a, int b){
    return a*b/g;
}

int solution(vector<int> arr) {
    int answer = 0;
    int prev,g,l;
    if (arr.size()==1)
        return arr[0];
    prev=arr[0];
    for (int i=1; i<arr.size(); i++){
        g=gcd(prev, arr[i]);
        l=lcm(g, prev, arr[i]);
        prev=l;
    }
    return l;
}

괜히 복잡하게 풀었다..

 

이 문제의 포인트는 2개 수의 최소공배수를 구해준 다음, 나머지 수와도 최소공배수를 계속 구해주는 방식이다.

다른 분의 풀이를 보니, (구한 최소 공배수, 나머지 수) 해서 바로 최소공배수를 구하는 방식을 취했다.

최소공배수는 두 수의 곱/최대공약수 이렇게 구해지므로, 최소공배수 함수 안에 최대공약수를 구하는 함수를 호출해야 한다. 

최대공약수를 구하는 함수는 유클리드 호제법을 이용한다 (gcd(a,b)==gcd(b, a%b)), a>=b

유클리드 호제법 함수를 재귀로 구현할 수 있다.