본문 바로가기
Algorithm/BackJoon

1934번: 최소공배수

by 꼬부기가우는소리 2023. 6. 12.
728x90

- 관련 사이트: https://www.acmicpc.net/problem/1934

 

1934번: 최소공배수

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있

www.acmicpc.net

 

자연수 A와 B의 최소공배수를 구하는 문제이다.

최대공약수를 찾은 후 해당 값을 통해 최소공배수를 계산해주었다.

 

1) A 와 B 중 작은 수 확인

2) 작은 수부터 2까지 두 수로 모두 나누어지는 가장 큰 값 확인 = 최대공약수

3) (A * B) / 최대공약수 = 최소공배수

 

#include <iostream>
using namespace std;

int getLCM(int A, int B)
{
    int small = A < B ? A : B;
    int gcd = 1;
    for (int i = small; i > 1; i--)
    {
        if (A % i == 0 && B % i == 0)
        {
            gcd = i;
            break;
        }
    }
    
    return (A * B) / gcd;
}

int main()
{
    int T, A, B;
    cin >> T;
    for (int i = 0; i < T; i++)
    {
        cin >> A >> B;
        cout << getLCM(A, B) << "\n";
    }
    return 0;
}

- 메모리: 2020 KB

- 시간: 172 ms

- 코드 길이: 425 B

 

아래와 같이 최대공약수 구하는 함수를 재귀 함수 형식 (유클리드 호제법) 으로도 문제를 풀어줄 수 있다.

 

#include <iostream>
using namespace std;

int getGCD(int A, int B)
{
    return B ? getGCD(B, A % B) : A;
}

int main()
{
    int T, A, B;
    cin >> T;
    for (int i = 0; i < T; i++)
    {
        cin >> A >> B;
        cout << (A * B) / getGCD(A, B) << "\n";
    }
    return 0;
}

- 메모리: 2020 KB

- 시간: 40 ms

- 코드 길이: 283 B

 

 

* 연관 문제:

- [프로그래머스] N개의 최소공배수

728x90

'Algorithm > BackJoon' 카테고리의 다른 글

15964번: 이상한 기호  (0) 2023.06.14
10814번: 나이순 정렬  (0) 2023.06.13
2744번: 대소문자 바꾸기  (0) 2023.06.10
11942번: 고려대는 사랑입니다  (0) 2023.06.09
25305번: 커트라인  (0) 2023.06.08

댓글