카테고리 없음

[재귀][프로그래머스] 최대공약수, 최소공배수 구하기 - 유클리드호제법

heidiee 2024. 11. 15. 22:56

https://school.programmers.co.kr/learn/courses/30/lessons/12940

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

 

 

 

난 while문으로 풀었는데 재귀가 좀 더 내스타일이라 찾아보았다.

원리가 아래 블로그에 너무 잘 나와있다

 

출처: 출처: https://velog.io/@soyeon207/%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98GCD-%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98LCM-%EA%B3%BC-%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Euclidean-algorithm

 

 

#include <string>
#include <vector>

using namespace std;

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

int gcd(int a, int b) {
    int c;
    while( b != 0) {
        c = a % b;
        a = b;
        b = c;
    }
    return a;
}

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

vector<int> solution(int n, int m) {
    vector<int> answer;
    answer.push_back(gcd(n,m));
    answer.push_back(lcm(n,m));
    return answer;
}