문제: https://programmers.co.kr/learn/courses/30/lessons/12953?language=javascript
※ 최대공배수 구하는 방법 (출처 : https://mathbang.net/204)
: 2 x 2 x 2 x 3 x 5 x 1 x 2 x 1 = 240
Assignment to function parameter 'arr'.
function solution(arr) {
let result = 1;
const max = arr.sort((a, b) => b - a)[0]; // 1. arr중 제일 큰 숫자를 찾음
// 2. 2부터 ~ max까지 for문을 돌면서 arr요소를 나눠봄.
for (let i = 2; i <= max; i += 1) {
// 3. arr의 요소 중 하나라도 2로 나눠지는게 있으면 true, while문 실행됨.
let trueFalse = arr.some((el) => el % i === 0);
// 4. arr에서 2로 나눌 수 있는 요소가 없을 때 까지 계속 나눠주면서, result에 2를 곱함.
// 5. 2로 나눌 수 있는 요소가 없으지면 i +1씩 증가시키면서, 다시 반복
while (trueFalse) {
arr = arr.map((el) => (el % i === 0 ? el / i : el));
result *= i;
if (arr.some((el) => el % i === 0)) {
trueFalse = true;
} else {
trueFalse = false;
}
}
}
// 6. arr를 더이상 나눌 수 없게되면, result와 arr에 남은 모든 요소를 곱하여 반환함.
return arr.reduce((acc, cur) => acc * cur, result);
}
// 실행코드
console.log(solution([60, 48, 40])); // 240
console.log(solution([2, 6, 8, 14])); // 168
console.log(solution([1, 2, 3])); // 6
console.log(solution([39, 26, 13, 11, 7, 5, 3, 2, 1])); // 30030
(다른 사람 방법 잘 모르겠음. 나중에 봐보기)
function gcd(a, b) {
return a % b ? gcd(b, a % b) : b;
}
function solution(num) {
return num.reduce((a, b) => (a * b) / gcd(a, b));
}
function solution(arr) {
return arr.reduce((acc, cur) => {
const recursive = (min, max) => {
return min % max === 0 ? max : recursive(max, min % max);
};
let max = 0;
return (acc * cur) / recursive(acc, cur);
});
}
function solution(arr) {
let answer = 0;
let isFind = false;
let i = 1;
arr.sort((a, b) => a - b);
const max = arr.splice(arr.length - 1, 1);
while (!isFind) {
isFind = arr.every((e) => (max * i) % e === 0);
i += 1;
}
answer = max * (i - 1);
return answer;
}
eslint경고 : Assignment to function parameter 'arr'.
이 규칙은 함수 매개 변수의 수정 또는 재할당으로 인해 발생하는 의도하지 않은 동작을 방지하는 것을 목적으로 합니다.
(https://eslint.org/docs/rules/no-param-reassign)
객체를 재할당하면 매개변수의 주소값이 달라지기 때문에, argument객체가 가르키는 주소와 달라져서 오류날 수 있음.
(https://mong-blog.tistory.com/entry/%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98-%EC%9E%AC%ED%95%A0%EB%8B%B9%EC%9D%84-%EC%A7%80%EC%96%91%ED%95%98%EC%9E%90no-param-reassign)