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

홀수 자릿수와 짝수 자릿수의 합 차이를 판별하는 Python 프로그램

이 글에서는 주어진 문제를 해결하기 위한 접근 방식과 풀이 과정을 살펴봅니다.

문제 정의

문제 – 하나의 정수가 주어졌을 때, 홀수 자릿수들의 합과 짝수 자릿수들의 합의 차이가 0인지 아닌지를 판별해야 합니다.

브루트 포스(Brute-force) 접근 방식

가장 직관적인 방법은 숫자를 한 자리씩 분리하여 홀수 자릿수의 합과 짝수 자릿수의 합을 각각 구한 뒤, 두 값을 서로 빼서 그 결과가 0이 되는지 확인하는 것입니다.

암산 원리를 활용한 최적화

연산 시간을 줄이기 위해 '암산(mental mathematics)' 개념을 활용할 수 있습니다. 핵심 아이디어는 다음과 같습니다.

두 합의 차이가 0이라는 조건이 성립하려면 해당 수는 반드시 11로 나누어떨어져야 합니다. 따라서 실제 구현에서는 숫자가 11로 나누어떨어지는지만 검사하면 됩니다.

이 최적화를 적용하면 시간 복잡도가 O(n)에서 나눗셈과 비교 연산에 필요한 상수 시간(O(1))으로 크게 감소합니다.

이제 실제 구현 코드를 살펴보겠습니다.

예제 코드

def isDiff(n):
    return (n % 11 == 0)
# main
n = 785643
if (isDiff(n)):
    print("Yes")
else:
    print("No")

실행 결과

No

동작 원리

예제의 입력값 785643을 직접 확인해 보면, 홀수 자릿수의 합은 7 + 5 + 3 = 15이고, 짝수 자릿수의 합은 8 + 6 + 4 = 18입니다. 두 값의 차이는 −3으로 0이 아니므로 결과는 "No"가 출력됩니다. 동시에 이 수는 11로 나누어떨어지지 않으므로, 11로 나눈 나머지를 검사하는 방식과도 결과가 일치합니다.

아래 그림과 같이 모든 변수와 함수는 전역 범위(global scope)에 선언되어 있습니다.

홀수 자릿수와 짝수 자릿수의 합 차이를 판별하는 Python 프로그램

결론

이 글에서는 홀수 자릿수의 합과 짝수 자릿수의 합 사이의 차이가 0인지 효율적으로 판별하는 방법을 배웠습니다. 숫자가 11로 나누어떨어지는지만 확인하면 되므로 코드가 매우 간결해지고, 반복 연산 없이 상수 시간 안에 결과를 얻을 수 있어 실행 속도 또한 크게 향상됩니다.