[LeetCode] 3411. Maximum Subarray With Equal Products

Chobby·1일 전

LeetCode

목록 보기
906/907

😎풀이

  1. 유클리드 호제법을 사용해 최대 공약수를 구하는 헬퍼 함수 getCD 정의
  2. 유클리드 호제법을 사용해 최소 공배수를 구하는 헬퍼 함수 getLCM 정의
  3. nums 2중 순회
    3-1. 범위 산정
    3-2. 현재 범위의 모든 요소 곱 계산
    3-3. 현재 범위의 모든 요소 최대 공약수 계산
    3-4. 현재 범위의 모든 요소 최소 공배수 계산
    3-5. 모든 곱 = 최대 공약수 * 최소 공배수 판별
    3-6. 조건을 만족하는 경우 최대 배열 길이 갱신
  4. 조건을 만족하는 가장 긴 배열의 길이 반환
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)
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글