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

파이썬으로 범위 내 정수들의 곱이 양수, 음수 또는 0인지 확인하는 방법

문제 개요

범위 [l, u]의 하한값과 상한값이 주어졌을 때, 해당 범위에 포함된 모든 숫자를 곱한 결과가 양수인지, 음수인지, 아니면 0인지 판별해야 합니다.

예를 들어 l = -8, u = -2가 입력으로 주어진 경우, 범위 내 값은 [-8, -7, -6, -5, -4, -3, -2]이며, 이들의 곱은 -40320입니다. 따라서 출력 결과는 "Negative"(음수)가 됩니다.

해결 접근 방식

범위의 모든 숫자를 실제로 곱하면 비효율적일 수 있으므로, 부호의 성질을 이용해 논리적으로 판단하는 것이 핵심입니다. 다음 단계로 문제를 해결할 수 있습니다.

  • 만약 l과 u가 모두 양수라면:
    • "Positive"(양수)를 반환합니다. 범위 내 모든 수가 양수이므로 곱도 반드시 양수입니다.
  • 그렇지 않고 l이 음수 또는 0이고 u가 0 또는 양수라면:
    • "Zero"를 반환합니다. 이 경우 범위에 0이 포함되므로 곱은 반드시 0이 됩니다.
  • 그 외의 경우 (즉, l과 u가 모두 음수):
    • n := |l - u| + 1로 범위 내 숫자의 개수를 구합니다.
    • n이 짝수라면 "Positive"를 반환합니다. 음수를 짝수 번 곱하면 결과는 양수입니다.
    • n이 홀수라면 "Negative"를 반환합니다. 음수를 홀수 번 곱하면 결과는 음수입니다.

예제 코드

def solve(l,u):
    if l > 0 and u > 0:
        return "Positive"
    elif l <= 0 and u >= 0:
        return "Zero"
    else:
        n = abs(l - u) + 1
        if n % 2 == 0:
            return "Positive"
        return "Negative"

l = -8
u = -2
print(solve(l,u))

입력

-8, -2

출력

Negative

동작 원리 설명

위 코드에서 l = -8, u = -2가 입력되면 두 값이 모두 음수이므로 else 블록으로 진입합니다. n = |-8 - (-2)| + 1 = 6 + 1 = 7이 되고, 7은 홀수이므로 최종적으로 "Negative"가 출력됩니다.

이 알고리즘의 시간 복잡도는 O(1)로, 범위 크기와 관계없이 상수 시간 안에 답을 구할 수 있다는 장점이 있습니다. 만약 범위가 매우 넓다면 실제로 모든 수를 곱하는 방식 대신 이러한 부호 기반 판별 방법이 훨씬 효율적입니다.