238. Product of Array Except Self

  • νŠΉμ • μœ„μΉ˜μ˜ κ²°κ³Ό 값은 κ²°κ΅­ λͺ¨λ“  κ°’μ˜ κ³± / νŠΉμ • μœ„μΉ˜μ˜ κ°’ 으둜 ꡬ할 수 μžˆλ‹€.
  • λ‹€λ§Œ 0이 μžˆλŠ” κ²½μš°κ°€ 문제인데 이 κ²½μš°λŠ” μ•„λž˜μ™€ 같이 ν•΄κ²°ν•œλ‹€.
    • 0이 2개 이상인 경우 λͺ¨λ“  곱은 0이 λœλ‹€.
    • 0이 1개인 경우 0을 μ œμ™Έν•œ 값을 λ‹€ κ³±ν•œλ’€ allProduct (1) νŠΉμ • μœ„μΉ˜μ˜ 값이 0이 μ•„λ‹ˆλ©΄ λ°˜λ“œμ‹œ 0을 ν¬ν•¨ν•˜κ²Œ λ˜λ―€λ‘œ κ²°κ³ΌλŠ” 0 (2) νŠΉμ • μœ„μΉ˜μ˜ 값이 0이면 κ²°κ³ΌλŠ” 0을 μ œμ™Έν•œ λͺ¨λ“  κ°’μ˜ 곱인 allProductκ°€ λœλ‹€.
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int allProduct = 1; int zeroCount = 0; for (int n : nums) { if (n != 0) allProduct *= n; else ++zeroCount; } vector<int> result; result.reserve(nums.size()); for (int n : nums) { if (zeroCount > 1) { result.push_back(0); } else if (zeroCount == 1) { result.push_back(n == 0? allProduct : 0); } else { result.push_back(allProduct / n); } } return result; } };