문제풀이/Programmers

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

서채리 2022. 2. 17. 14:41

[문제]

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

 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하

programmers.co.kr

 

[풀이]

하샤드 수란 x 자릿수 합으로 x가 나누어 지는 수 이다.

18의 경우 18 -> 1 + 8 = 9, 18 % 9 = 0 이기 때문에 18은 하샤드 수이다.

11의 경우 11 -> 1 + 1 = 2, 11 % 2 != 0 이기 때문에 11은 하샤드 수가 아니다.

 

문제는 10의 자리 숫자와 1의 자리 숫자를 어떻게 효율적으로 나누는 지가 포인트 인 것 같다.

반복문으로 각 원소에 접근해 구하는 방법도 있지만 map을 이용해주었다.

 

list(map(int, str(x))

해당 코드는 양의 정수 x를 string 값으로 변환한 후, 변환된 str 값을 한 개씩 int 값으로 다시 변환해준다.

이를 리스트에 담아주면 양의 정수 18이 입력값으로 들어온 경우, 18은 "18"로 변환된 후 "1", "8" 이 각각 int 값인 1, 8 으로 변환되고 이를 리스트에 담기 때문에 [1, 8] 이 도출된다.

 

sum(list) 를 통해 리스트의 합계를 계산한 후 해당 값으로 x가 나누어 떨어지는지 확인한다.

 

[코드]

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