238. Product of Array Except Self

선우·2023년 1월 6일
0

Approach

  • 자기 자신을 제외한 나머지 요소들을 곱한 값을 출력하는 문제.
  • 모든 요소들을 곱한 gop변수를 만들어 자기 자신을 나누도록 생각함.
  • 동시에 nums[i]의 요소 값이 0이면 zeroCnt를 올려 nums배열에 몇 개의 0이 존재하는지 파악하였다.
  • 0이 아니면 gop변수에 nums[i]를 곱해줌.
  • 0의 개수가 2개 이상이면 자기 자신이 0이여서 제외를 해도 무조건 값은 0이 나옴. ans벡터를 바로 리턴해준다.
  • 0의 개수가 1이라면 자신을 제외한 모든 요소의 값은 0이고 nums[i]가 0일때 의 값은 gop이다.
    • nums[i]가 0이면 해당 인덱스에 gop을 넣어줌, 그게 아니라면 0을 넣어줌.
  • 0이 없다면 gop에서 자기 자신 nums[i]를 나눠준 값을 넣어줌.

Code

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        vector<int> ans;

        int gop = 1, zeroCnt = 0;

        for(int i = 0; i < nums.size(); i++)
        {
            if(nums[i] != 0) 
            {
                gop *= nums[i];
                continue;
            }
            zeroCnt++;
        }

        if(zeroCnt > 1)
        {
            for(int i = 0; i < nums.size(); i++)
            {
                ans.push_back(0);
            }
            return ans;
        }
        else if(zeroCnt == 1)
        {
            for(int i = 0; i < nums.size(); i++)
            {
                if(nums[i] == 0) 
                {
                    ans.push_back(gop);
                    continue;
                }
                ans.push_back(0);
            }
        }
        else
        {
            for(int i = 0; i < nums.size(); i++)
            {
                ans.push_back(gop/nums[i]);
            }
        }

        return ans;
    }
};

Result


추가적인 해결방법

  • 0의 개수를 count함수를 통해 zeroCnt 변수에 저장한다.
  • 0의 개수가 1보다 크면 ans를 바로 리턴한다.
  • 0의 개수가 1이면 j변수에 0이 존재하는 인덱스를 저장시키고 ansj에다가 gop을 넣어준다. 그리고 ans를 리턴
  • 그게 아니라면 gop에 nums[i]를 나눠줌.
    class Solution {
    public:
        vector<int> productExceptSelf(vector<int>& nums) {
            int n = nums.size();
            vector<int> ans(n);
    
            int gop = 1;
            int zeroCnt = count(nums.begin(), nums.end(), 0);
    
            cout << zeroCnt;
            if(zeroCnt > 1) return ans;
            if(zeroCnt == 1)
            {
                int j;
                for(int i = 0; i < n; i++)
                {
                    if(nums[i] == 0) 
                    {
                        j = i;
                        continue;
                    }
                    gop*=nums[i];
                }
                ans[j] = gop;
    
                return ans;
            }
            for(int i = 0; i < n; i++)
            {
                gop*=nums[i];
            }
    
            for(int i = 0; i < n; i++)
            {
                ans[i] = gop/nums[i];
            }
    
            return ans;
        }
    };

profile
누누의 잡다저장소

0개의 댓글