#1. 문제
#2. 풀이
1. 유클리드 호제법
Details
'유클리드 호제법'은 두 수 a와 b의 최대 공약수를 구하는 알고리즘입니다. 이 알고리즘은 두 정수 a와 b의 최대 공약수가 a와 b를 나눈 나머지 값을 이용하여 계속 나누는 과정을 반복하다가, 나머지가 0이 되어 나누어 떨어지는 수가 생기면 그 수가 두 수의 최대 공약수가 되는 점을 활용합니다.
2. 최대 공약수, gcd
int gcd(int a, int b)
{
int c = a%b;
while(c != 0)
{
a = b;
b = c;
c = a%b;
}
return b;
}
3. 최소 공배수, lcm
int lcm(int a, int b)
{
return (a*b) / gcd(a,b);
}
4. 세 정수 A, B, 그리고 C의 최소 공배수는 lcm(lcm(a, b), c)와 같다!
- vector 컨테이너의 0번째 항목과 1번째 항목의 lcm 값을 먼저 계산합니다.
- 이후, vector 컨테이너의 2 번째 항목부터 차례대로 순회하며 lcm 값을 업데이트 합니다.
#3. 코드
#include <string>
#include <vector>
using namespace std;
/*
a, b, 그리고 c의 최소 공배수는 lcm(lcm(a,b), c) 와 같습니다.
*/
int gcd(int a, int b)
{
int c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
return b;
}
int lcm(int a, int b)
{
return (a * b) / gcd(a, b);
}
int solution(vector<int> arr)
{
int answer = 0;
if ((int)arr.size() < 2)
return arr[0];
answer = lcm(arr[0], arr[1]);
for (int i = 2; i < arr.size(); ++i)
{
answer = lcm(answer, arr[i]);
}
return answer;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers_C++]#Level2_멀리 뛰기, dp, 동적 프로그래밍 (0) | 2023.12.24 |
---|---|
[Programmers_C++]#Level2_귤 고르기, map, priority_queue, 우선순위 큐 (0) | 2023.12.24 |
[Programmers_C++]#Level3_입국 심사, 이분 탐색 (0) | 2023.12.14 |
[Programmers_C++]#Level2_타겟 넘버, DFS, 재귀 호출 (0) | 2023.12.13 |
[Programmers_C++]#Level2_예상 대진표 (0) | 2023.12.13 |