CodeWars 02: Persistent Bugger

김기욱·2021년 3월 26일
0

코딩테스트

목록 보기
38/68

문제설명

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.

(예제참고) 주어진 숫자의 각 자리수를 곱한다. 곱한값으로 새로운 숫자를 만든다. 새로운 숫자의 각 자리수를 곱한다. 이 과정을 반복해서 총 몇번을 하면 자리수가 1의자리에 도달하는지 카운트를 해라.

제한사항

None

입출력 예시

persistence(39) => 3 # Because 39 = 27, 27 = 14, 1*4=4

                   # and 4 has only one digit.                 

persistence(999) => 4 # Because 999 = 729, 729 = 126,

                   # 1*2*6 = 12, and finally 1*2 = 2.

persistence(4) => 0 # Because 4 is already a one-digit number.

풀이

def persistence(n):
    result = 0
    num = str(n)
    
    while 1 < len(num):
        count = 1
        for v in str(num):
            count *= int(v)
        num = str(count)
        result += 1    
    return result
  1. int자료형은 각 자리수를 떼어내서 연산할 수 없습니다. str로 형 변환을 해줍니다.
  2. 문제요건에서 자리수가 1이면 연산을 종료하고 결과값을 출력하면 되므로 while 1 < len(num)을 통해
    종료시점을 정해줍니다.
  3. for loop을 돌려서 각자리수를 곱한값을 만들고 이를 새로운 num으로 치환합니다. 동시에 result변수로 카운트를 해줍니다.
  4. while loop이 끝나고 카운트 된 result를 리턴합니다.
profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글