-
[프로그래머스/Level 1] 최대 공약수와 최소 공배수 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 27. 14:08
programmers.co.kr/learn/courses/30/lessons/12940
풀이
유클리드 알고리즘을 이용하여 두 수의 최대 공약수와 최소 공배수를 구하는 문제이다.
유클리드 알고리즘이란 a=12, b=18이라고 할 때, b를 a로 나눈 나머지가 0이면 a가 최대 공약수가 되고, 만약 0이 아니라면 b의 값을 a로, b%a의 값을 b로 두어 이를 나눈 나머지가 0인지 계속 확인하는 것이다.
이렇게 최대 공약수를 구하고 난 후, 최소 공배수는 (최대 공약수 * a/최대 공약수 * b/최대 공약수) 식을 통해 쉽게 구할 수 있다.
백준에도 똑같은 문제가 있으므로 이것도 풀어보면서 알고리즘에 익숙해지면 좋을 것 같다.
전체 코드
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> solution(int n, int m) { vector<int> answer; if(n<m) swap(n,m); int i=n, j=m; while(1) { if(i%j==0) { answer.push_back(j); break; } else { int tmp=i; i=j; j=tmp%j; } } int x=answer[0]*(n/answer[0])*(m/answer[0]); answer.push_back(x); return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 1] 비밀지도 (C++) (0) 2020.10.27 [프로그래머스/Level 1] 행렬의 덧셈 (C++) (0) 2020.10.27 [프로그래머스/Level 1] 키패드 누르기 (C++) (0) 2020.10.26 [프로그래머스/Level 1] 시저 암호 (C++) (0) 2020.10.26 [프로그래머스/Level 1] 소수 찾기 (C++) (0) 2020.10.26