지영이의 개발 블로그
[프로그래머스]최대공약수와 최소공배수(유클리드 호제법 & 재귀함수) 본문
✔최대 공약수와 최소 공배수
문제
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
입출력 예
nmreturn
3 | 12 | [3,12] |
2 | 5 | [1,10] |
풀이
최대공약수와 최소공배수를 구하는 문제이다. 둘의 공식은 아래와 같다.
- 최대공약수 : 유클리드 호제법
- 최소공배수 : a * b / 최대공약수
유클리드 호제법이란?
쉽게 설명하자면,
a > b 일 때,
a % b = r (나머지)
b % r = r2
r % r2 = r3
..
..
나머지가 0이 될 때 까지 반복한다.
이 때, 나머지를 0으로 만든 나눈 수가 최대공약수가 된다.
https://www.youtube.com/watch?v=aPYE0anPZqI
<My solution>
👉
최대 공약수 = G
최소 공배수 = L 을 선언해주고
최대 값과 최소값을 구하기 위해 num을 선언해주고 for문을 사용해 n(최댓값) % i 의 나머지가 0 이 거나 m(최솟값) % i 의 나머지가 0이되면 그 i의 값을 G에 할당해주고
n*m/G 공식을 사용해 최소 공배수를 구해주었다.
<Other solution>
👉최대 공약수는 유클리드 호제법을 사용해 주었고
최소 공배수는 a*b / 최대공약수 를 해주었다.
나머지가 0이 될기 전까지 나누는수 / 나머지가 재귀적으로 실행된다.
=>처음에 b의 위치에 있던 값ㅇ a 로 이동함
나머지가 0 이 되면 나눈 수(a)를 반환하고 이것이 최대 공약수가 되고
나머지가 0 이 아니면 재귀로 함수를 실행한다 .
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]문자열 내 맘대로 정렬하기 (0) | 2022.07.21 |
---|---|
✔[프로그래머스]콜라츠 추측 (0) | 2022.07.20 |
✔[프로그래머스]덜 푼 문제풀기 -5문제 (1) (0) | 2022.07.18 |
[프로그래머스]실패율 (0) | 2022.07.17 |
[프로그래머스]크레인 인형뽑기 게임 (0) | 2022.07.15 |
Comments