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

Python에서 8진수의 10진수 표현이 7로 나누어 떨어지는지 확인하는 방법

하나의 8진수(octal)가 주어졌을 때, 해당 수의 10진수 표현이 7로 나누어 떨어지는지 확인하는 문제를 살펴보겠습니다.

예를 들어 입력이 n = 61이라면 결과는 True입니다. 8진수 61의 10진수 값은 6×8 + 1 = 48 + 1 = 49이며, 49는 7로 나누어 떨어지기 때문입니다.

접근 방법

이 문제는 8진법의 수학적 성질을 활용하면 매우 간단하게 해결할 수 있습니다. 8을 7로 나눈 나머지는 1이므로(8 ≡ 1 (mod 7)), 8진수 각 자릿수의 합을 7로 나눈 나머지는 원래 수를 7로 나눈 나머지와 같습니다. 이는 10진법에서 "각 자릿수의 합이 9로 나누어 떨어지면 그 수도 9로 나누어 떨어진다"는 잘 알려진 성질과 동일한 원리입니다.

따라서 실제로 10진수 변환을 수행하지 않고도 다음 단계만으로 판별할 수 있습니다.

  • 자릿수 합(digit_sum)을 0으로 초기화합니다.
  • num이 0이 아닌 동안 다음을 반복합니다.
    • digit_sum에 num을 10으로 나눈 나머지(마지막 자릿수)를 더합니다.
    • num을 10으로 나눈 몫으로 갱신합니다.
  • 반복이 끝난 후 digit_sum을 7로 나눈 나머지가 0이면 True를, 아니면 False를 반환합니다.

구현 예제

def solve(num):
    digit_sum = 0
    while num:
        digit_sum += num % 10
        num = num // 10
    return digit_sum % 7 == 0

num = 61
print(solve(num))

참고로 원본 코드에서는 변수 이름으로 sum을 사용했지만, 이는 파이썬 내장 함수 sum()과 이름이 겹치므로 위 예제처럼 digit_sum과 같은 이름을 사용하는 것이 좋은 습관입니다.

더 파이썬다운 구현

문자열 변환과 내장 함수를 활용하면 한 줄로도 해결할 수 있습니다.

def solve(num):
    return sum(int(d) for d in str(num)) % 7 == 0

num = 61
print(solve(num))

입력

61

출력

True

8진수 61의 각 자릿수 합은 6 + 1 = 7이고, 7은 7로 나누어 떨어지므로 True가 출력됩니다. 실제로 10진수 값인 49 역시 7로 나누어 떨어지는 것을 확인할 수 있습니다.