카테고리 없음

[코딩도장 파이선(python)] 카프리카

리그캣 2019. 3. 10. 17:58

카프리카 수

카프리카 수란 인도의 수학자 D.R.카프리카의 의해 정의한 수이다.

어떤 수의 제곱수를 두 부분으로 나누어 더하였을 때 다시 원래의 수가 되는 수들을 의미한다.

예를 들어 45는 카프리카 수인데, 45² = 2025이고, 20+25 = 45이기 때문이다.

  1. 어떤 수를 입력 받고 그 수가 카프리카 수인지 아닌지를 출력하는 함수를 만드시오.

  2. 어떤 수를 입력 받고 자릿수가 그 수인 모든 카프리카 수를 출력하시오.

  3. 어떤 수를 입력 받고 어떤 수 이하의 모든 카프리카 수를 출력하시오.

이 셋중에서 원하는 유형 하나를 골라 푸시오.

입력 (유형 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))


이를 파이썬으로 구현해 보면 다음과 같이 소스코드를 작성할 수 있다