[TIL] 이중 for문 멈춰! 🖐️

gangmin·2025년 4월 13일

Algorithm

목록 보기
5/10
post-thumbnail

238. Product of Array Except Self

배열을 돌면서 자신을 제외한 요소들의 곱을 반환하는 문제이다.

처음에는 그냥 이중 for문 돌면서 구하거나 전체 요소들의 곱을 구해서 나눠주면 되겠네 싶었지만... 아래의 조건들로 바로 떠오른 방법들은 쓸 수 없었다. 😲

배열을 이중으로 순회하지 않고 자신을 제외한 요소들의 곱을 구하기... 🧐 🧐 🧐 (help.Matthew)

자신을 제외한 양쪽 모든 숫자들의 곱??? 을 곱해준다.

nums = [1,2,3,4] 이고 인덱스가 2라면 (1) (3,4) 를 모두 곱해준다. 그런데 만약 이미 곱해져있다면? 단 한 번의 순회로 답을 구할 수 있다!

그러기 위해 미리 곱셈 연산을 해놓으면 된다.
왼쪽부터 시작하는 누적곱 배열, 오른쪽에서부터 시작하는 누적곱 배열 2개를 생성한다.

var productExceptSelf = function (nums) {
    let num = 1;
    const arr1 = [];
    for (let i = 0; i < nums.length; i++) {
        num *= nums[i]
        arr1.push(num)
    }

    num = 1;
    const arr2 = []
    for (let i = nums.length - 1; i >= 0; i--) {
        num *= nums[i]
        arr2[i] = num
    }

    const ans = [];
    for (let i = 0; i < nums.length; i++) {
        if (i === 0) {
            ans[i] = arr2[i + 1]
        } else if (i === nums.length - 1) {
            ans[i] = arr1[i - 1]
        } else {
            ans[i] = arr1[i - 1] * arr2[i + 1]
        }
    }

    return ans
};

0개의 댓글