카테고리 없음
[코딩도장 파이선(python)] 카프리카
리그캣
2019. 3. 10. 17:58
카프리카 수
카프리카 수란 인도의 수학자 D.R.카프리카의 의해 정의한 수이다.
어떤 수의 제곱수를 두 부분으로 나누어 더하였을 때 다시 원래의 수가 되는 수들을 의미한다.
예를 들어 45는 카프리카 수인데, 45² = 2025이고, 20+25 = 45이기 때문이다.
어떤 수를 입력 받고 그 수가 카프리카 수인지 아닌지를 출력하는 함수를 만드시오.
어떤 수를 입력 받고 자릿수가 그 수인 모든 카프리카 수를 출력하시오.
어떤 수를 입력 받고 어떤 수 이하의 모든 카프리카 수를 출력하시오.
이 셋중에서 원하는 유형 하나를 골라 푸시오.
입력 (유형 1)
print(kaprekar_number(1))
print(kaprekar_number(45))
print(kaprekar_number(297))
print(kaprekar_number(3213))
출력 (유형 1)
True
True
True
False
해당 문제는 numpy를 쓰면 쉽게 풀 수 있다.
45의 제곱인 2025를 보자. 2,0,2,5라는 배열을 numpy array로 변경하게 되면
[:2]로 20을 뺄 수 있을 것이고
[2:]로 25를 뺄 수 있을 것이다.
그리고 둘을 더하게 되면 45가 나온다 이를 비교하여 서로 같으면 True 를 리턴하면 된다.
여기서 문제가 발생하게 되는데 :2 <- 2라는 숫자를 어떻게 얻어와야할까.??
어렵게 생각할 것 없다.
for문으로 [:1] 부터 [:최대길이] 까지 돌리며 모든 경우를 비교해 보면 될것이다.
import numpy as np
def kaprekar_number(num):
numje = num**2
numjelist = np.array(list(str(numje)))
print(numjelist)
for i in range(1, len(numjelist)):
if int(''.join(numjelist[:i]))+int(''.join(numjelist[i:])) == num:
return True
return False
print(kaprekar_number(45))
이를 파이썬으로 구현해 보면 다음과 같이 소스코드를 작성할 수 있다