문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
x는 1이상, 10000 이하인 정수
입출력 예
| x | return |
|---|---|
| 10 | true |
| 12 | true |
| 11 | false |
| 13 | false |
(내가 쓴 코드)
def solution(x):
# x 리스트로 변환하기
str_x = str(x)
list_x = list(str_x)
add_x = int(str_x[0])+int(str_x[1])
if x % add_x == 0:
return True
else:
return False

왜 어떤건 맞는데 어떤건 오답인지 보니, x가 두자리수 이상일수도 있었다.
2트
def solution(x):
sum_x = 0
len_x = len(str(x))
for i in range(1, len_x+1):
sum_x += int(i)
if x % sum_x == 0:
return True
else:
return False
또 오답!!!
튜터님께 코드 상담 결과 len()으로 묶어준 것 까진 잘했는데,
sum += int(i)에서 잘못되었다고 한다.
int(i)는 여기서 인덱스순서만 가져오지 우리가 원하는 리스트 안의 숫자를 하나씩 가져오고 있지 않는다고 한다.
코드 수정
def solution(x):
sum_x = 0
str_x = str(x)
len_x = len(str_x)
for i in range(len_x):
sum_x += int(str_x[i])
if x % sum_x == 0:
return True
else:
return False
str_x[ i ]) 처럼 꼭 문자열/리스트 형식내에서 i를 돌린다고 명시 할 것간단한 풀이
def solution(x):
x_sum = 0
for i in str(x):
x_sum += int(i)
if x % x_sum == 0:
return True
else:
return False
x= 123'1','2','3'