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

파이썬으로 숫자의 짝수 자리 숫자들의 곱이 K로 나누어 떨어지는지 확인하는 방법

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

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

문제 해결 접근 방법

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

  • 주어진 숫자 n의 전체 자릿수를 계산합니다.
  • 곱을 저장할 변수 prod를 1로 초기화합니다.
  • n이 0보다 큰 동안 반복합니다:
    • 현재 자릿수가 짝수라면, n의 마지막 자릿수를 prod에 곱합니다.
    • n을 10으로 나눈 몫으로 갱신합니다.
    • 자릿수 카운터를 1 감소시킵니다.
  • 반복이 끝난 후 prod가 k로 나누어 떨어지면 True를 반환하고, 그렇지 않으면 False를 반환합니다.

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

예제 코드

from math import log10

def solve(n, k):
    digit_count = int(log10(n))+1
    prod = 1
    while n > 0 :
        if digit_count % 2 == 0 :
            prod *= n % 10
        
        n = n // 10
        digit_count -= 1

    if prod % k == 0:
        return True
    return False
    
n = 59361
k = 3
print(solve(n, k))

입력

59361, 3

출력

True

코드 설명

log10(n)을 활용하면 숫자의 자릿수를 손쉽게 구할 수 있습니다. 로그 값에 1을 더한 후 정수형으로 변환하면 총 자릿수가 됩니다. 이후 while 루프에서 n % 10으로 마지막 자릿수를 추출하고, n // 10으로 이미 확인한 자릿수를 제거하면서 왼쪽으로 이동합니다. 현재 처리 중인 자릿수가 짝수 번째일 때만 해당 숫자를 곱셈에 포함시키는 것이 핵심입니다.

이 알고리즘의 시간 복잡도는 O(d)이며, 여기서 d는 숫자의 자릿수입니다. 따라서 매우 큰 숫자에 대해서도 효율적으로 동작합니다.