2019๋ 10์ 27์ผ
๏ฟฝ
์ถ์ฒ: https://www.codewars.com/kata/55bf01e5a717a0d57e0000ec/solutions/python
Write a function, persistence, that takes in a positive parameter num and returns its multiplicative persistence, which is the number of times you must multiply the digits in num until you reach a single digit.
For example:
persistence(39) => 3 # Because 3*9 = 27, 2*7 = 14, 1*4=4
# and 4 has only one digit.
persistence(999) => 4 # Because 9*9*9 = 729, 7*2*9 = 126,
# 1*2*6 = 12, and finally 1*2 = 2.
persistence(4) => 0 # Because 4 is already a one-digit number
persistence(39) # returns 3, because 3*9=27, 2*7=14, 1*4=4
# and 4 has only one digit
persistence(999) # returns 4, because 9*9*9=729, 7*2*9=126,
# 1*2*6=12, and finally 1*2=2
persistence(4) # returns 0, because 4 is already a one-digit number
-
๊ฐ ์๋ฆฌ์์ ๊ณฑ์ ๊ตฌํ๋ค.
- ๊ฐ ์๋ฆฌ์๋ฅผ ๊ณฑํ ๋๋ง๋ค count +1์ ํ๋ค.
-
์๋ฆฌ์๊ฐ ํ ์๋ฆฌ๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
# ๊ฐ ์๋ฆฌ์์ ๊ณฑ์ ๊ตฌํ๋ ํจ์
def mul(n):
num = 1
for i in range(len(n)):
num *= int(n[i])
return str(num)
def persistence(n):
n = str(n)
count = 0
while len(n) > 1:
n = mul(n)
count += 1
return count
operator.mul, functools.reduce ๋ชจ๋ ์ด์ฉ
import operator
from functools import reduce
def persistence(n):
i = 0
while n>=10:
n= reduce(operator.mul,[int(x) for x in str(n)],1)
i+=1
return i
operator
๋ชจ๋์๋ ์ฌ๋งํ ์ฐ์ฐ์ ํจ์๊ฐ ๋ค ๊ตฌํ๋์ด ์๋ค.reduce
: ์๋ฐ์คํฌ๋ฆฝํธ์ reduce์ ๊ฐ๋ค. reduce๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์์ ๋ง์ด ์ค์ผ ์ ์๋ค.