우선 어떻게 하면 최소공배수 최대공약수를 구할 수 있는지를 찾아보고 혼자 만들어보았다.
나중에 깨달았는데 여기에 문제점이 있다..
function solution(n,m){
let answer = []
let big_num = 0
let small_num = 0
if (n>m) {
big_num = n
small_num = m
} else {
big_num = n
small_num = m
}
return lcm(big_num, small_num)
function gcd(n, m){
if (n%m === 0) {
return answer.push(m)
} else {
gcd(m, n%m)
}
return answer
}
function lcm(n, m){
return (n*m) / gcd(n, m)
}
}
위에서 최소공배수를 구하는 방법을 알았으니 주어진 배열에 있는 숫자들을 하나씩 가지고 와서 어떻게 원하는 값을 도출해내느냐가 관건.
solution 에서 배열의 첫번째 값을 고정으로 두고(arr[0]) 그 다음 배열의 값(arr[1])을 불러와서 최소공배수를 구하고 그 값을 result에 저장한다. 그리고 구해진 최소공배수를 그다음 값(arr[2])와 비교를 해서 또 최소공배수를 구해야 하기때문에 arr[0]는 result(구해진 최소공배수) 로 바꾸어줬다.
function callcm(n, m) { // 8,4
let answer = []
let big_num = 0
let small_num = 0
if (n>m) {
big_num = n
small_num = m
} else {
big_num = n
small_num = m
}
return lcd(big_num, small_num)
function gcd(n, m){
if (n%m === 0) {
return answer.push(m)
} else {
gcd(m, n%m)
}
return answer
}
function lcd(n, m){
return (n*m) / gcd(n, m)
}
}
function solution(arr){
let result = 0
for (let i=1; i<arr.length; i++){
result = callcm(arr[0], arr[i])
arr[0] = result
}
return result
}
완성한 줄 알았지만 문제점 발생.
주어진 값들은 잘 나오지만 정작 테스트를 실행했을 때는 전부 다 오류가 나왔다.
console.log() 를 찍어보다보니 알게 되었다.
최대공약수가 계속 1만 나온다.. 알고보니 gcd의 return 값인 answer이 배열로 되어있어서 그런 것.

배열을 숫자로 다시 바꿔줬더니 완만하게 해결.
다른 분들은 더 짧게 쓰셨던데 어떻게 하신 건지 볼 필요가 있을 거 같다.
function callcm(n, m) { // 8,4
let answer = 0
let big_num = 0
let small_num = 0
if (n>m) {
big_num = n
small_num = m
} else {
big_num = n
small_num = m
}
return lcm(big_num, small_num)
function gcd(n, m){
if (n%m === 0) {
answer = m
} else {
gcd(m, n%m)
}
return answer
}
function lcm(n, m){
return (n*m) / gcd(n, m)
}
}
function solution(arr){
let result = 0
for (let i=1; i<arr.length; i++){
result = callcm(arr[0], arr[i])
arr[0] = result
}
return result
}