문제링크: https://leetcode.com/problems/product-of-array-except-self/
자기 원소를 제외한 나머지의 곱을 보여주는 배열을 얻는 문제이다.
Product는 0이 포함되면 0이 되기 때문에 0의 존재를 기준으로 다음과 같이 기준을 세웠다.
zeroIndex
라는 변수를 사용한다.var productExceptSelf = function(nums) {
// 1. 0이 없는 경우: TotalProduct(reduce)를 구해서 자기 원소로 나눈다.(map)
// 2. 0이 하나만 있는 경우: 0자리만 나머지 product를 해주고 나머지는 0
// 3. 0이 두 개 이상: 모두 0
let zeroIndex = -1; // 음수: zero가 없음, 0이상: zero가 발견됨
let totalProduct = 1;
for (let i = 0; i < nums.length; i++) {
if (nums[i] === 0) {
// 3번 경우의 수 (zero가 두 번째 발견됨)
if (zeroIndex >= 0) return Array(nums.length).fill(0);
else zeroIndex = i;
} else {
totalProduct *= nums[i]
}
}
// 2번 경우의 수 (zero가 한 번 발견됨)
if (zeroIndex >= 0) {
const result = new Array(nums.length).fill(0);
result[zeroIndex] = totalProduct;
return result;
} else {
// 1번 경우의 수 (zero가 없음)
return nums.map((el) => totalProduct / el);
}
};