본문 바로가기

Coding Test/Programmers

[프로그래머스 코딩테스트 JavaScript] Level 1-17 최대공약수와 최소공배수

반응형

[프로그래머스 코딩테스트 JavaScript] Level 1-17 최대공약수와 최소공배수

 

 

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

제한 사항

  • 두 수는 1이상 1000000이하의 자연수입니다.

입출력 예

nmreturn

3 12 [3, 12]
2 5 [1, 10]

입출력 예 설명

입출력 예 #1
위의 설명과 같습니다.

입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

 

 

 

 

나의 답

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

다른 분의 코드,,, 현타왓다. 

 

처음엔 이게 뭔가 싶었는데 찾아보니 유클리드 호제법을 사용한거라고... 

 

 

 

 

 

 

위의 코드 풀이 

먼저 최대공배수는 최소공약수만 구하면 된다. a*b / 최소공약수 = 최대공배수

위의 함수 GCD(a,b) 는 return 반환한다. b 라면 ? == b의 값이 false (0) 이 아니라면? GCD 함수에 인자값 (b, a%b)를 다시 넣는다. a 자리에는 b가 b의 자리에는 a나누기 b의 나머지값을 넣음

 

( a % b = 나머지값 r 이라면 a, b의 최대공약수 == b,r의 최대공약수가 같다. 계속 b % r = r1,   r % r1 = r2 이렇게 나누다가 나머지값이 0 이되면 나눈값이 최대공약수)

 

계쏙 나누다가 b가 0이면? Math.abs(a) a의 절대값을 return = 최대공약수 반환한다. 

 

 

반응형