https://leetcode.com/problems/number-of-subarrays-with-lcm-equal-to-k/
N이 1000정도라서 O(n^2) bruteforce가 가능하다. (n^3은 안됨)
각각의 subarray들을 일일이 검사할수있다는 뜻이다.
근데 나는 각 subarray들마다 lcm을 찾아야하니까 또 O(n)이 필요해서 O(n^3)인줄 알았는데
생각해보니 i를 고정시켜놓고 j를 증가시키는 과정에서 lcm을 업데이트하면서 k보다 같은지 큰지만 검사해주면된다.
lcm update는 O(1)이라는 소리. 그래서 총 O(n^2)으로 해결 가능하다. 코드를 보면 이해가 쉽다.
from math import lcm
class Solution:
def subarrayLCM(self, nums: List[int], k: int) -> int:
answer = 0
for i in range(len(nums)):
listLcm = 1
for j in range(i, len(nums)):
listLcm = lcm(listLcm, nums[j])
if listLcm == k:
answer += 1
if listLcm > k:
break
return answer
lcm이랑 gcd를 직접 구현해서 써봤더니 gcd에서 maximum recursion depth에러가 떠서 그냥 내장함수로 바꿨다. (lcm = a * b / gcd(a,b) )
'코딩 테스트 및 알고리즘 > leetcode for google' 카테고리의 다른 글
leetcode hard : Maximum Number of Non-overlapping Palindrome Substrings (0) | 2022.11.18 |
---|---|
leetcode medium : Minimum Number of Operations to Sort a Binary Tree by Level (0) | 2022.11.18 |
leetcode medium: Implement Trie (Prefix Tree) (0) | 2022.11.16 |
leetcode medium : Capacity To Ship Packages Within D days (0) | 2022.11.15 |
leetcode medium : Range Sum Query Mutable (1) | 2022.11.15 |