하샤드 수
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
x
는 1 이상, 10000 이하인 정수입니다.
입출력 예
arr | return |
---|---|
10 | true |
12 | true |
11 | false |
13 | false |
입출력 예 설명
입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
문제풀이 IDEA
각 자리별로 slicing한 값을 더해 우리가 입력으로 받은 값을 나눠준다
그리고 결과에 따라거 True False를 리턴해준다
나의 코드
위의 코드에서 x.split()을 이용하여 list로 바꿔주고 해당 list로 반복문을 돌려서 코드를 작성해 줘도 된다.
다른 코드
위의 코드를 보면 list comprehension을 이용하여 int로 된 list를 생성해주고
해당 list를 더해주는 코드로 sum을 사용한다
그리고 이때 n 을 sum의 결과값으로 나눈 나머지와 0을 비교하면 바로 boolean 값이 생성되므로 해당 값을 return 해주는것이 훨씬 좋은 코드가 된다.
1 2 3 4 5 6 7 8 | def solution(x): temp = 0 for i in range(len(str(x))): #입력받은 문자열의 길이만큼 index가 탐색을 해준다 temp += int(str(x)[i]) #그리고 temp에 slicing된 값을 int로 변환하여 더해나간다 if x % temp == 0: #처음 우리가 받았던 x를 자릿수의 합으로 나눠서 나머지가 0이면 return True #True를 리턴하고 함수를 종료한다 return False if문에 안걸리면 자동으로 False를 리턴하고 종료한다 |
위의 코드에서 x.split()을 이용하여 list로 바꿔주고 해당 list로 반복문을 돌려서 코드를 작성해 줘도 된다.
다른 코드
def Harshad(n): # n은 하샤드 수 인가요? return n % sum([int(c) for c in str(n)]) == 0
위의 코드를 보면 list comprehension을 이용하여 int로 된 list를 생성해주고
해당 list를 더해주는 코드로 sum을 사용한다
그리고 이때 n 을 sum의 결과값으로 나눈 나머지와 0을 비교하면 바로 boolean 값이 생성되므로 해당 값을 return 해주는것이 훨씬 좋은 코드가 된다.
-출처 : 프로그래머스
댓글 없음:
댓글 쓰기