문제풀이/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