숫자 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는 숫자의 자릿수입니다. 따라서 매우 큰 숫자에 대해서도 효율적으로 동작합니다.