숫자 n이 주어졌을 때, 이 숫자의 모든 자릿수가 n을 나눌 수 있는지 확인하는 문제입니다.
예를 들어 n = 135라면 결과는 True입니다. 135 ÷ 1 = 135, 135 ÷ 3 = 45, 135 ÷ 5 = 27처럼 각 자릿수(1, 3, 5)로 나누었을 때 모두 나머지가 없기 때문입니다.
해결 접근 방법
이 문제는 다음 단계를 따라 해결할 수 있습니다:
- 변수 val에 n의 값을 복사합니다.
- val이 0보다 큰 동안 반복합니다:
- d := val mod 10 → 가장 오른쪽 자릿수를 추출합니다.
- n이 d로 나누어 떨어지지 않으면 False를 반환합니다.
- val := val / 10의 몫 → 마지막 자릿수를 제거합니다.
- 반복이 정상적으로 끝나면 True를 반환합니다.
주의할 점은 자릿수에 0이 포함된 경우입니다. 0으로는 나눌 수 없으므로 반드시 예외 처리가 필요합니다. 아래 코드에서는 is_divisible 함수가 d가 0인지 먼저 검사하여 이를 안전하게 처리합니다.
예제 코드
def is_divisible(n, d):
return d != 0 and n % d == 0
def solve(n):
val = n
while val > 0:
d = val % 10
if not is_divisible(n, d):
return False
val = val // 10
return True
n = 135
print(solve(n))입력
135
출력
True
복잡도 분석
시간 복잡도는 O(log₁₀ n)으로, 숫자의 자릿수 개수에 비례합니다. 추가적인 저장 공간을 사용하지 않으므로 공간 복잡도는 O(1)입니다.