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

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

숫자 n과 또 다른 숫자 k가 주어졌을 때, n의 홀수 자리(오른쪽에서 왼쪽 방향)에 위치한 자릿수들의 합이 k로 나누어 떨어지는지 확인하는 문제입니다.

예를 들어, 입력이 n = 2416, k = 5라고 가정해 보겠습니다. 오른쪽에서 왼쪽으로 셀 때 홀수 자리에 있는 숫자들은 4와 6이며, 이들의 합은 4 + 6 = 10입니다. 10은 5로 나누어 떨어지므로 결과는 True가 됩니다.

문제 해결 접근 방식

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

  • 합계를 저장할 변수 total을 0으로, 자리 위치를 나타낼 변수 pos를 1로 초기화합니다.
  • n이 0보다 큰 동안 다음 과정을 반복합니다.
    • pos가 홀수라면, 현재 자릿수(n mod 10)를 total에 더합니다.
    • n을 10으로 나눈 몫으로 갱신합니다. (n // 10)
    • pos를 1 증가시킵니다.
  • 반복이 끝난 후, total이 k로 나누어 떨어지면 True를 반환합니다.
  • 그렇지 않으면 False를 반환합니다.

예제 코드

def solve(n, k):
    total = 0
    pos = 1
    while n > 0:
        if pos % 2 == 1:
            total += n % 10
        n = n // 10
        pos += 1
    
    if total % k == 0:
        return True
    return False

n = 2416
k = 5
print(solve(n, k))

입력

2416, 5

출력

True

코드 설명

위 코드의 동작 원리를 살펴보겠습니다.

  • n % 10: 숫자의 가장 오른쪽 자릿수를 추출합니다.
  • n // 10: 가장 오른쪽 자릿수를 제거하여 한 자리씩 왼쪽으로 이동합니다.
  • pos % 2 == 1: 현재 처리 중인 자리가 홀수 번째 자리인지 확인합니다.

n = 2416의 경우 실행 과정은 다음과 같습니다.

  • 1번째 자리(홀수): 6 → total = 6
  • 2번째 자리(짝수): 건너뜀
  • 3번째 자리(홀수): 4 → total = 10
  • 4번째 자리(짝수): 건너뜀

최종적으로 total = 10이 되고, 10 % 5 == 0이므로 True가 반환됩니다. 이 알고리즘의 시간 복잡도는 O(log₁₀n)으로, 숫자의 자릿수에 비례합니다.