Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 – 짝수 자릿수 숫자의 곱이 홀수 자릿수 숫자의 합으로 나누어 떨어지는지 확인하는 방법

숫자 n이 주어졌을 때, 짝수 자리에 있는 숫자들의 곱홀수 자리에 있는 숫자들의 합으로 나누어 떨어지는지 확인해야 합니다. 여기서 자리는 오른쪽에서 왼쪽 방향으로 세며, 가장 오른쪽 자리를 1번째 자리로 간주합니다.

예를 들어 입력값이 n = 59361이라면 출력은 True가 됩니다. 짝수 자리(2번째, 4번째)에 있는 숫자는 6과 9이므로 곱은 6 × 9 = 54이고, 홀수 자리(1번째, 3번째, 5번째)에 있는 숫자는 1, 3, 5이므로 합은 1 + 3 + 5 = 9입니다. 54는 9로 나누어 떨어지므로 결과는 True입니다.

풀이 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 주어진 숫자 n의 전체 자릿수(digit_count)를 구합니다.
  • 합계(total)는 0으로, 곱(prod)은 1로 초기화합니다.
  • n이 0보다 큰 동안 아래 과정을 반복합니다.
    • 현재 자리 번호(digit_count)가 짝수이면 prod에 현재 마지막 자릿수를 곱합니다.
    • 그렇지 않으면(홀수 자리이면) total에 현재 마지막 자릿수를 더합니다.
    • n을 10으로 나눈 몫으로 갱신하여 처리한 자릿수를 제거합니다.
    • digit_count를 1 감소시킵니다.
  • 반복이 끝난 후 prodtotal로 나누어 떨어지면 True를 반환하고, 그렇지 않으면 False를 반환합니다.

코드 동작 원리

이 코드는 숫자를 문자열로 변환하지 않고 순수한 산술 연산만으로 각 자릿수를 처리합니다. n % 10으로 가장 오른쪽 자릿수를 추출하고, n // 10으로 이미 처리한 자릿수를 제거합니다. 또한 log10을 이용해 전체 자릿수를 미리 계산해 두면, 현재 처리 중인 자리가 홀수 번째인지 짝수 번째인지 손쉽게 판별할 수 있습니다. 시간 복잡도는 자릿수에 비례하여 O(d)입니다.

아래 예제 코드를 통해 더 자세히 이해해 보겠습니다.

예제 코드

from math import log10

def solve(n):
    digit_count = int(log10(n)) + 1
    total = 0
    prod = 1
    while n > 0:
        if digit_count % 2 == 0:
            prod *= n % 10
        else:
            total += n % 10

        n = n // 10
        digit_count -= 1

    if prod % total == 0:
        return True
    return False

n = 59361
print(solve(n))

입력

59361

출력

True