[Python]_코딩테스트_하샤드 수

김희정·2024년 1월 18일

코딩테스트

목록 보기
2/13

문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 조건
x는 1이상, 10000 이하인 정수

입출력 예

xreturn
10true
12true
11false
13false

(내가 쓴 코드)
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가 두자리수 이상일수도 있었다.

2def 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
  • len() 범위는 꼭 (1, n+1)로 할 필요가 없음
  • sum_x += int(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
  • str(x) 로 묶인걸 for i 로 프린트를 해보면
    ex_ x= 123
    result= '1','2','3'
    문자열이 리스트 형태로 가져올 수 있음!!
profile
데이터 애널리스트가 되고 싶은

0개의 댓글