5508. Number of Ways Where Square of Number Is Equal to Product of Two Numbers

Number of Ways Where Square of Number Is Equal to Product of Two Numbers

 

Account Login - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

- 질문 내용 : Array 2개가 주워 지는데 Array 1번의 값을 제곱한 값을 Array 2번에서 선택한 2개의 Elements 곱으로 만들 수 있겠는가?

- 접근 방법

해당 질문의 예를 보자면 이렇다.

[2], [1,2,2,4]

이렇게 주어졌다고 했을때 2*2 = 1*4, 2*2 이렇게 2가지 경우가 가능 하다.

접근 방법은 two sum을 사용해서 처리 했다. leetcode.com/problems/two-sum/

위에 질문을 다음과 같이 변경해 보겠다

[a], [b,c,c,d] 라고 했을 때

a*a = a/b의 값이 나머지 ,c,c,d에 있는 가를 찾는 방법이다.

여기서 a/b를 d라고 한다면, a/d의 값은 반대로 b가 된다.

여기서 b와 d는 서로 연관관계를 갖음으로 b를 조회 할때 map에 b를 넣어놓고

d에 도달했을 때 b를 찾아서 return 하면 된다. 

글을 잘 못써서 two sum을 안풀어본 사람은 어려울것 같은데 상기 링크 문제 풀고 나면 이해하기 쉬울 것 같다.

마지막으로 실수 한게 있었는데 Array 1이 'a*a'대상이 되지만 Array2도 'a*a' 대상이 되어야 한다.

2번 처리 해야한다.

var numTriplets = function(nums1, nums2) {
    let result = 0;
    
    for(let num of nums1){
        result += findNum(num * num,nums2);
    }
    
    for(let num of nums2){
        result += findNum(num * num,nums1);
    }
    
    return result;
    
    
    function findNum(powerValue, arr){
        let map = new Map();
        let count = 0;
        
        for(let i = 0; i < arr.length; i++){
            if(map.has(powerValue/arr[i])){
                count += map.get(powerValue/arr[i]); 
            }
            map.set(arr[i],~~map.get(arr[i])+1);
        }
        return count;
    }
};

 

 

728x90
반응형