포스트

프로그래머스 — CodeKata 20

문제 요약 — 프로그래머스 입문 문제 — 기초 구현 풀이

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

최대공약수·최소공배수 문제. gcd는 유클리드 호제법(두 수를 나머지 연산으로 계속 줄여 나가면 gcd만 남는 성질)으로 구하고, 최소공배수는 두 수의 곱을 gcd로 나눈 값이라는 관계식을 이용해 n / gcd * m으로 계산했다.

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
//https://school.programmers.co.kr/learn/courses/30/lessons/12940

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int m) {
    vector<int> answer;

    int num1 = n, num2 = m;
    while (num2 != 0)
    {
        int temp = num2;
        num2 = num1 % num2;
        num1 = temp;
    }
    int max = num1;
    int min = n / max * m;

    answer.push_back(max);
    answer.push_back(min);

    return answer;
}

핵심 요약 — 유클리드 호제법 while 루프 몇 줄이면 gcd가 나오고, lcm은 gcd × lcm = n × m 관계식으로 바로 얻는다. 두 값을 따로 계산할 필요가 없다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.