문제
n, m 입력받고, n과 m의 최소 공배수를 출력하는 프로그램을 작성하시오.
실행 결과
코드(c++)
#include <iostream>
using namespace std;
int gcd(int a, int b) { // 최대공약수
if (b == 0) {
return a;
}
else {
return gcd(b, a % b);
}
}
int lcm(int a, int b) { // 최소공배수
return (a * b) / gcd(a, b);
}
int main() {
int n, m;
cin >> n >> m;
cout << lcm(n, m);
return 0;
}
코드 설명
1. 최대공약수 gcd
유클리드 알고리즘이란 두 개의 정수의 최대공약수를 결정하는 데 사용되는 알고리즘이다.
두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 호제법이라고도 부른다.
두 정수가 서로소(relatively prime)인 경우, 유일한 공통 양의 정수 인수는 1이라는 것을 이용한다.
과정: 두 수를 나눈다. 그런 다음 나머지를 취하여 이전의 두 수 중 작은 값으로 대체한다.
이 과정을 나머지가 0이 될 때까지 계속 반복한다.
2. 최소공배수 lcm
a와 b의 최소공배수는 두 수의 곱 나누기 a와 b의 최대공약수임을 이용한다.
두 수의 곱을 하면 최대공약수가 공통으로 곱해져 있으므로
최대공약수로 한 번 나눠주면 두 수의 최소공배수를 얻을 수 있다.
문제 출처:
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
'PS' 카테고리의 다른 글
백준 2869번: 달팽이는 올라가고 싶다 (0) | 2024.05.03 |
---|---|
백준 1259번: 팰린드롬수 (0) | 2024.04.29 |
백준 2747번: 피보나치 수 (0) | 2024.04.27 |
백준 2444번: 별 찍기 - 7 (0) | 2024.04.26 |
백준 2231번: 분해합 (0) | 2024.04.24 |