[프로그래머스] Lv1. 하샤드 수

최대 1 분 소요

문제

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

제한 조건

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

나의 풀이:

def solution(x):
    res = 0
    for i in str(x):
        res += int(i)
    if x % res == 0:
        ans = True
    else:
        ans = False
    return ans

빠르게 문제를 풀었다. 이제 코드를 줄여보자.

def solution(x):    
    res = sum(list(map(int, str(x))))
    return True if x % res == 0 else False

전에 배운 map 함수를 사용해보았다. 그리고 if 문 역시 한 줄로 줄여냈다.

다른 사람들의 풀이:

def solution(x):
    return x % sum([int(i) for i in str(x)]) == 0

굳이 map 함수를 쓰지 않고도 이렇게 표현이 가능한데 괜히 지난 풀이에 map 함수가 쓰인 걸 보고 사용해보고 싶은마음에 쓴 것 같다.

항상 풀고나면 ‘알면서 왜 생각못했을까?’ 싶은 풀이들이 많아서 아직 아쉽다.

댓글남기기