Description

Given an integer number n, return the difference between the product of its digits and the sum of its digits.

Example 1:

  • Input: n = 234
  • Output: 15
  • Explanation:
    Product of digits = 2 * 3 * 4 = 24
    Sum of digits = 2 + 3 + 4 = 9
    Result = 24 - 9 = 15

Example 2:

  • Input: n = 4421
  • Output: 21
  • Explanation:
    Product of digits = 4 * 4 * 2 * 1 = 32
    Sum of digits = 4 + 4 + 2 + 1 = 11
    Result = 32 - 11 = 21

Constraints:

  • 1 <= n <= 105

💡 Hint 1:
How to compute all digits of the number ?

💡 Hint 2:
Use modulus operator (%) to compute the last digit.

💡 Hint 3:
Generalise modulus operator idea to compute all digits.

Submitted Code

class Solution:
    def subtractProductAndSum(self, n: int) -> int:
        product, sum = 1, 0

        while n > 0:
            last = n % 10       # 마지막 자리 숫자
            product *= last
            sum += last
            n //= 10
        
        return product - sum

Runtime: 0 ms | Beats 100.00%
Memory: 19.41 MB | Beats 5.95%

% 연산으로 자릿수만큼 while문을 반복하는 방법이 가장 정석인 것 같다.

Other Solutions

1st

from functools import reduce
import operator

class Solution:
    def subtractProductAndSum(self, n):
        A = list(map(int, str(n)))
        return reduce(operator.mul, A) - sum(A)

time complexity: 𝑂(log𝑛)
space complexity: 𝑂(1)

정수 n을 문자열로 변경하여 푸는 방법이다. 정수 n의 자릿수는 ⌊logn⌋ + 1개이기 때문에 위의 방법과 시간복잡도는 동일하다.

Leave a comment