https://programmers.co.kr/learn/courses/30/lessons/12947
만약 주어진 값이 하샤드 수라면 각 자리의 수를 합한 값으로 주어진 값이 나누어 떨어져야 한다.
그리고 이것을 판별하는 코드를 작성하는 것이 바로 이 문제이다.
나는 각 문자열의 값을 가져오기 위해 주어진 숫자를 문자열로 변경하여 한 자리씩 다시 정수로 바꿔 누적합을 구해주는 방식으로 해결하였다 !
def solution(x):
num = 0
# 누적합 구하기
for i in str(x): num += int(i)
# 하샤드 수인가?
if x % num == 0:
return True
else: return False
문제는 성공적으로 풀었지만 이것도 분명 더 간결하게 작성이 가능할 것 같았다.
return 문에서 조건문을 활용하는 방식을 다시 볼 수 있었다. 내가 작성한 코드를 한 줄로 다음과 같이 변경이 가능했다 !!
return True if x % num == 0 else False
나는 단순하게 반복문을 사용하여 누적합을 구하려고 했지만 여기서 파이썬의 내장 함수를 사용하여서 구하는 것도 가능하다. 어떤 코드가 더 나은 코드인지는 사실 잘 모르겠다..!
근데 이렇게 내장함수를 사용하면 내가 작성한 코드를 단 한줄로 작성이 가능해진다.
def solution(x):
return True if x % sum([int(n) for n in str(x)]) == 0 else False
sum 함수는 리스트 내의 모든 원소의 값을 합하여 반환하는 함수이다.
따라서 각 자리의 수를 리스트의 원소 하나씩으로 만든 후 함수를 사용하여 누적합을 구하고 나누어서 0이 되는 경우에만 True를 반환하도록 한다 !
이렇게 줄일 수 있다니 진짜 감탄했다 ~~~