[#19][알고리즘] N개의 최소공배수
프로그래머스 > N개의 최소공배수
문제링크(https://programmers.co.kr/learn/challenge_codes/152)
C++풀이
vector를 내림차순으로 정렬 => {14, 8, 6, 2}
-----------------------------------------------------
14와 8의 최소공배수 = 56
56과 6의 최소공배수 = 168
168과 2의 최소공배수 = 168
-----------------------------------------------------
i = 1 : lcm(14, 8) = 56 = answer
i = 2 : lcm(56,6) = 168 = answer
i = 3 : lcm(168,2) = 168 = answer
return answer = 168
나중에 다시 풀어보니 다른 풀이가 나와서 추가 (위에 풀이와 비슷하지만)
문제링크(https://programmers.co.kr/learn/challenge_codes/152)
C++풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//최대공약수
long long gcd(long long a, long long b){
return a%b==0 ? b : gcd(b, a%b);
}
//최소공배수
long long lcm(long long a, long long b){
return a*b/gcd(a,b);
}
long long nlcm(vector<int> num)
{
long long answer = 0;
sort(num.rbegin(), num.rend());
answer =num[0];
for(int i = 1; i < num.size(); i++){
answer = lcm(answer,num[i]);
}
return answer;
}
int main()
{
vector<int> test{ 2,6,8,14 };
// 아래는 테스트로 출력해 보기 위한 코드입니다.
cout << nlcm(test);
}
| cs |
-----------------------------------------------------
14와 8의 최소공배수 = 56
56과 6의 최소공배수 = 168
168과 2의 최소공배수 = 168
-----------------------------------------------------
i = 1 : lcm(14, 8) = 56 = answer
i = 2 : lcm(56,6) = 168 = answer
i = 3 : lcm(168,2) = 168 = answer
return answer = 168
나중에 다시 풀어보니 다른 풀이가 나와서 추가 (위에 풀이와 비슷하지만)
#include<iostream>
#include<vector>
using namespace std;
long long gcd(long long x, long long y)
{
return x%y==0? y : gcd(y, x%y);
}
long long nlcm(vector<int> num)
{
long long answer = 0;
for(int i = 0; i < num.size()-1; i++){
if(i==0){
//처음 2와 6의 최소공배수를 구하기
answer = (num.at(i) * num.at(i+1)) / gcd(num.at(i), num.at(i+1));
}else{
//위에서 구한 2와 6의 최소공배수와 8의 최소공배수를 구하기
answer = (answer * num.at(i+1))/ gcd(answer, num.at(i+1));
}
}
return answer;
}
int main()
{
vector<int> test{2,6,8,14};
// 아래는 테스트로 출력해 보기 위한 코드입니다.
cout << nlcm(test);
}
| cs |
댓글
댓글 쓰기