어흥

[Leetcode] Product of Array Except Self (C++) 본문

알고리즘/LeetCode

[Leetcode] Product of Array Except Self (C++)

라이언납시오 2023. 8. 8. 14:32
728x90
반응형

문제 링크: https://leetcode.com/problems/product-of-array-except-self/description/?envType=list&envId=rdlarbki 

 

Product of Array Except Self - LeetCode

Can you solve this real interview question? Product of Array Except Self - Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i]. The product of any prefix or suffix of nu

leetcode.com

1. 주의할 점

- 원소중에 0이 있다면?

- 원소중에 0이 2개 이상 있다면?

 

2. 구현

- O(N)으로 구현하라고 했으므로 생각했던 방법은 모든 원소들의 곱을 구하고 해당 원소로 나누면 될 것 같았다.(모든 원소들의 곱은 int 범위를 벗어나지 않는다고 문제에 적혀있기 때문)

- 하지만 원소중에 0이 있다면 실수/0 = 무한대가 되어버린다. 그래서 0의 개수(zeroNum)를 따져보기로 했다.

- 0이 1개 있다면, 해당 원소를 제외한 원소들의 곱만 0이 아닌 값을 가지고 나머지는 0을 가진다. 그리고 0이 2개 이상 있다면 당연히 자신을 제외한 모든 원소들의 곱은 0이 된다.

- mulExceptZero의 값에는 0이 아닌 모든 원소들의 곱을, mul에는 모든 원소들의 곱을 저장하도록 구현했다.

 

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int mul = 1,zeroNum=0,mulExceptZero=1;
        for(int i=0;i<nums.size();i++){
            int val = nums[i];
            mul *= val;
            if(val==0) zeroNum++;
            else mulExceptZero *= val;
        }
        vector<int> answer;
        for(int num: nums){
            int initNum = 0;
            if(zeroNum==1 && num==0) initNum = mulExceptZero;
            else if(zeroNum==0) initNum = mul/num;
            answer.push_back(initNum);
        }

        return answer;
    }
};
728x90
반응형
Comments