문제 개요
숫자 배열 nums가 주어졌을 때, 이 숫자들을 모두 곱한 결과가 짝수인지 홀수인지 판별해야 합니다.
예를 들어 입력이 nums = [5,7,4,2,6]이라면 곱은 5 × 7 × 4 × 2 × 6 = 1680이고, 1680은 짝수이므로 출력은 "Even"이 됩니다.
접근 방법
곱셈의 성질을 활용하면 실제로 모든 수를 일일이 곱하지 않고도 결과를 빠르게 판별할 수 있습니다.
- 배열에 짝수가 하나라도 포함되어 있으면 전체 곱은 반드시 짝수입니다.
- 모든 수가 홀수일 때만 전체 곱이 홀수가 됩니다.
따라서 다음과 같은 단계로 문제를 해결할 수 있습니다:
- 0부터 배열 길이 - 1까지 반복합니다.
- nums[i]가 짝수이면 즉시 "Even"을 반환합니다.
- 반복이 끝날 때까지 짝수를 찾지 못했다면 "Odd"를 반환합니다.
이 방법의 시간 복잡도는 O(n)이며, 짝수를 조기에 발견하면 불필요한 연산 없이 바로 종료되므로 매우 효율적입니다.
예제 코드
def solve(nums): for i in range(len(nums)): if not nums[i] & 1: return "Even" return "Odd" nums = [5,7,4,2,6] print(solve(nums))
코드에서 not nums[i] & 1은 비트 연산을 활용한 표현입니다. 어떤 수와 1을 비트 AND(&) 연산하면 마지막 비트만 남게 되는데, 이 값이 0이면 해당 수는 짝수입니다. 즉, 나머지 연산자(%) 대신 비트 연산으로 홀짝 여부를 검사하는 것입니다.
입력
[5,7,4,2,6]
출력
Even
정리
n개 숫자의 곱의 홀짝성을 구할 때는 전체 곱을 계산할 필요가 없습니다. 배열을 한 번만 순회하면서 짝수의 존재 여부만 확인하면 되며, 이는 곱셈에서 짝수가 하나라도 섞이면 결과가 항상 짝수가 된다는 산술적 성질 덕분입니다.