
😎풀이
- 유클리드 호제법을 사용해 최대 공약수를 구하는 헬퍼 함수
getCD 정의
- 유클리드 호제법을 사용해 최소 공배수를 구하는 헬퍼 함수
getLCM 정의
nums 2중 순회
3-1. 범위 산정
3-2. 현재 범위의 모든 요소 곱 계산
3-3. 현재 범위의 모든 요소 최대 공약수 계산
3-4. 현재 범위의 모든 요소 최소 공배수 계산
3-5. 모든 곱 = 최대 공약수 * 최소 공배수 판별
3-6. 조건을 만족하는 경우 최대 배열 길이 갱신
- 조건을 만족하는 가장 긴 배열의 길이 반환
function maxLength(nums: number[]): number {
let maxLen = 0
const n = nums.length
for(let left = 0; left < n; left++) {
for(let right = left + 1; right <= n; right++) {
const range = nums.slice(left, right)
const product = range.reduce((acc, cur) => acc * cur, 1)
const gcd = range.reduce(getGCD)
const lcm = range.reduce(getLCM)
if(product === gcd * lcm) maxLen = Math.max(maxLen, range.length)
}
}
return maxLen
};
function getGCD(a: number, b: number) {
if(a % b === 0) return b
return getGCD(b, a % b)
}
function getLCM(a: number, b: number) {
return a * b / getGCD(a, b)
}