숫자 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)으로, 숫자의 자릿수에 비례합니다.