백트래킹과 최소 공배수를 사용했다.
숫자가 5개라서 백트래킹을 돌렸다. 숫자 5개 중 3개를 선택하여 최소 공배수를 구한 후 가장 작은 값을 리턴한다.
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int res = 1000000;
int arr[5];
vector<int> selected;
int gcd(int a, int b)
{
while (b)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
int lcm(int a, int b)
{
return a / gcd(a, b) * b;
}
int getLcmThree(int a, int b, int c)
{
return lcm(lcm(a, b), c);
}
void DFS(int idx, int cnt)
{
if (cnt == 3)
{
int result = getLcmThree(selected[0], selected[1], selected[2]);
res = min(res, result);
return;
}
for (int i = idx; i < 5; i++)
{
selected.push_back(arr[i]);
DFS(i + 1, cnt + 1);
selected.pop_back();
}
}
int main(void)
{
for (int i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
DFS(0, 0);
printf("%d\n", res);
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 17142] 연구소 3 (0) | 2020.12.22 |
---|---|
[백준 17144] 미세먼지 안녕! (0) | 2020.12.21 |
[백준 17141] 연구소 2 (0) | 2020.12.19 |
[백준 1978] 소수 찾기 (0) | 2020.12.18 |
[백준 6064] 카잉 달력 (0) | 2020.12.18 |
댓글