주어진 숫자가 해피 넘버(Happy Number)인지 확인해야 할 때는 '%'(나머지), '//'(몫), '+'(덧셈) 연산자를 활용할 수 있습니다.
해피 넘버란 무엇인가?
해피 넘버는 숫자의 각 자릿수를 제곱한 값을 모두 더한 수로 반복해서 대체했을 때, 최종적으로 1에 도달하는 숫자를 말합니다. 예를 들어 19는 1² + 9² = 82, 다시 8² + 2² = 68처럼 계산이 반복되어 언젠가 1이 되므로 해피 넘버입니다. 반면 이 과정이 1에 도달하지 못하고 특정 수들 사이에서 무한히 순환하는 숫자는 해피 넘버가 아닙니다.
예제 코드
def check_happy_num(my_num):
remaining = sum_val = 0
while(my_num > 0):
remaining = my_num%10
sum_val = sum_val + (remaining*remaining)
my_num = my_num//10
return sum_val;
my_num = 86
my_result = my_num
while(my_result != 1 and my_result != 4):
my_result = check_happy_num(my_result);
print("The number is being checked")
if(my_result == 1):
print(str(my_num) + " is a happy number");
elif(my_result == 4):
print(str(my_num) + " isn't a happy number");출력 결과
The number is being checked 86 is a happy number
코드 설명
- 'check_happy_num'이라는 이름의 함수를 정의하고, 숫자 하나를 매개변수로 받습니다.
- 숫자가 0보다 큰지 검사하며 반복문을 실행합니다.
- 합계 변수(sum_val)를 0으로 초기화합니다.
- '%' 연산자로 숫자를 10으로 나눈 나머지, 즉 가장 뒤의 자릿수를 구해 변수에 저장합니다.
- 이 나머지를 제곱한 후 합계 변수에 더합니다.
- '//' 연산자로 숫자를 10으로 나눈 몫을 다시 대입하여 처리한 자릿수를 제거합니다.
- 위 과정을 숫자의 모든 자릿수에 대해 반복한 뒤, 제곱합을 반환합니다.
- 확인할 숫자를 정의하고, 원본을 보존하기 위해 그 복사본을 만듭니다.
- 결과가 1 또는 4가 될 때까지 앞서 정의한 함수를 반복 호출하여 해피 넘버 여부를 검사합니다.
- 검사 결과에 따라 해당 숫자가 해피 넘버인지 아닌지 콘솔에 출력합니다.
왜 결과가 4인지 확인할까?
해피 넘버가 아닌 모든 숫자는 결국 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4의 순환에 빠지게 됩니다. 따라서 반복 계산 중 결과가 1이 아니라 4에 도달하면, 해당 숫자가 해피 넘버가 아니라고 확실히 판단할 수 있습니다. 위 예제에서 86은 각 단계의 계산을 거쳐 최종적으로 1에 도달하기 때문에 해피 넘버로 판별됩니다.