수학적인 규칙을 요구하는 문제에 처음에 조금 당황했지만..
부딪혀 보는식으로 풀이를 진행했었다.
먼저 입력받은 두 수가 서로 약수, 배수의 관계라는 조건으로부터 코드를 작성했으며,
Math.max()
, Math.min()
의 두가지 메소드를 활용해서 두 수의 크기를 비교했다.
const solution = (n, m) => {
let min = Math.min(n,m)
let max = Math.max(n,m)
let 최대공약수;
let 최소공배수;
if(max % min === 0) {
최대공약수 = min;
최소공배수 = max;
return [최대공약수, 최소공배수]
} else {
for(let i=1; i <= min ; i+=1){
if( min % i === 0 && max % i === 0 ){
최대공약수 = i;
최소공배수 = min * max / 최대공약수;
}
}
return [최대공약수, 최소공배수]
}
}
else
문에서는 for 반복문을 사용해서 1부터 시작하여 최대공약수를 찾아가는 방법을 활용해서
n과m의 최대공약수, 최소공배수를 찾아 답을 return 해주었다.
하지만 풀이를 개선하는 과정에서 또 한번 충격을 먹었던 주인장이었으니..
const solution = (n, m) => {
let min = Math.min(n,m)
let max = Math.max(n,m)
let 최대공약수;
for(let i=1; i<=min;i++){
if( max % i === 0 && min % i === 0 ) {
최대공약수 = i;
}
}
const answer = [ 최대공약수, (max * min / 최대공약수)];
return answer;
}
사실 기존에 작성했던 첫 if 조건문의 항목은 쓸데없이 코드만 길게 할 뿐이었다..
최대공약수, 최소공배수의 조건에 부합하다면 위의 코드로도 충분히 결과를 도출 할 수 있었다.. ㅋㅋㅋㅋ
나름 고민좀 해서 문제 해결했었는데, 살짝 허탈(?)한 느낌이 들었던 문제였다..