728x90
문제 설명
제한 사항
문제 풀이 방법
- 이 문제는 유클리드 호제법을 이용해 최대 공약수를 구한 뒤 최소 공배수를 구하는 방식으로 풀었다.
- 간략하게 정리하면 a, b 두 수(a > b)를 나누고 나온 나머지가 0이 될 때 까지 진행하며,
나머지가 0이 될 때의 a가 두 수의 최대 공약수가 된다. - 최소 공배수는 두 수를 곱한 값을 최대 공약수로 나눈 값이다.
내가 작성한 코드
const solution = (n, m) => {
// 최대 공약수는 유클리드 호제법을 이용해 작성
const getGcd = (a, b) => a % b === 0 ? b : getGcd(b, a%b)
const gcd = getGcd(n, m);
// 최소 공배수는 위에서 구한 최대 공약수를 이용해 구할 수 있다.
const getLcm = (a, b) => a * b / gcd
const lcm = getLcm(n, m);
return [gcd, lcm];
}
문제를 해결하고 다른 사람들이 작성한 코드를 보는데 엄청난 것을 발견했다.
function solution(a, b) {
var r;
for(var ab= a*b;r = a % b;a = b, b = r){}
return [b, ab/b];
}
;;;;;;;
for문의 작성법이 굉장히 인상적이다.
변수 ab는 a, b를 곱한 값으로 선언했고, r은 a와 b 서로 나눈 나머지 값이며, 다시 a=b, b=r로 할달 했다.
이는 유클리드 호제법을 for문으로 작성한 것으로 b가 0이 될 때 까지 for문은 동작한다.
머리가 띵하다......
for문을 이렇게 사용할 수 있는지 이 코드를 보며 놀랐다.....
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
2Level / 연습 문제 / 숫자의 표현 (0) | 2023.05.25 |
---|---|
2Level / 연습 문제 / 최솟값 만들기 (1) | 2023.05.25 |
2Level / Summer/Winter Coding(~2018) / 점프와 순간 이동 (0) | 2023.05.22 |
2Level / 2020 KAKAO BLIND RECRUITMENT / 문자열 압축 (0) | 2023.05.22 |
2Level / 연습문제 / 숫자 블럭 (0) | 2023.05.18 |