갱스터하우스

[Python] Lv1.하샤드 수 본문

코테 문제/프로그래머스

[Python] Lv1.하샤드 수

승갱 2022. 4. 8. 00:21

https://programmers.co.kr/learn/courses/30/lessons/12947


문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 조건

  • x는 1 이상, 10000 이하인 정수입니다.


나의 접근 방법 및 풀이
입력받은 숫자를 자릿수마다 나누어서 합을 구하고, 최종적으로 x를 자릿수의 합 sum으로 나누어지는 지에 따라 True와 False를 return 했다.

def solution(x):
    sum = 0
    t = x
    for i in range(len(str(x))-1, -1, -1):
        sum += t // (10**i)
        t = t%(10**i)
    ##print(sum)
    if x % sum==0:
        return True
    else:
        return False


<다른 풀이>

def solution(n):
    # n은 하샤드 수 인가요?
    return n % sum([int(i) for i in str(n)]) == 0

내가 풀면서도 자릿수를 일일이 나누고 다시 x값을 나눈 몫으로 저장하면서도 찜찜했는데, 이 코드를 보자마자 왜 찜찜했는지 알 수 있었다. 내가 하면서도 '아 이거 이렇게 안 풀어도 될 것 같은데' 싶었는데....
입력받은 숫자 n을 숫자로 취급하지 않고 str로 변환하여 각 자릿수를 문자열의 요소로 생각하여 리스트에 담고, sum을 이용하여 합계를 구하고, 이걸 n으로 나누었을 때 나머지에 따라 자동으로 True와 False를 return 하게 했다.
for문도 한 줄로 사용하고, if문 없이도 이렇게 표현할 수 있다는 게 너무 좋았다.