• Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 27
  • 28
  • 29
  • 30
  • 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
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

# 12940 최대공약수와 최소공배수

image

문제 정리

두 수의 [최대공약수, 최소공배수] 배열 반환하기

생각해보기

gcd 이런 함수 써도 되는건가?… 아니면 내가 직접 구해야 하는지?!ㅠㅠ 우선 직접 하는 쪽으로 해보자…

코드 쓰기

2개의 수의 최대공약수 - 유클리드 호제법, 최소공배수 - 최대공약수를 통해 구하면 됨!
유클리드 호제법

두 개의 자연수 a와 b에서(단 a>b) a를 b로 나눈 나머지를 r이라고 했을때 GCD(a, b) = GCD(b, r)과 같고 “r이 0이면 그때 b가 최대공약수이다.”라는 원리를 활용한 알고리즘

재귀로 풀기

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

반복문으로 풀기

int GCD(int a,int b){
    while(1){
        int r = a%b;
        if(r==0) return b;
		
        a = b;
        b = r;
    }
}

최소공배수

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

라고 한다…

내 풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int m) {
    vector<int> answer;
    int a = 0; int b = 0;
    
    // a>b 만들어주기
    if(n<m){
        a = m;
        b = n;
    } else {
        a = n;
        b = m;
    }
    
    while(1){
        int r = a%b;
        if (r==0) { break; };
        a = b;
        b = r;
    }
    
    answer.push_back(b);
    
    // 최소공배수 구하기
    answer.push_back(n*m / b);
    
    return answer;
}

풀고 나서 알게된 것

최소공배수 최대공약수 구하는 법 알아두기…^^ 하