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

파이썬으로 배열에서 나머지 요소들의 곱과 같은 값 찾는 방법

문제 개요

배열 nums가 주어졌을 때, 이 배열 안에 '나머지 모든 요소들의 곱'과 값이 같은 요소가 존재하는지 확인하는 문제입니다.

예를 들어 입력이 nums = [3, 2, 24, 4, 1]이라면 출력은 True입니다. 그 이유는 24가 나머지 요소들의 곱(3 × 2 × 4 × 1 = 24)과 일치하기 때문입니다.

해결 접근 방식

이 문제는 다음 단계를 통해 해결할 수 있습니다.

  1. 곱을 저장할 변수 mul을 1로 초기화합니다.
  2. 배열의 모든 요소를 순회하며 mul에 각 요소를 곱해 전체 곱을 구합니다.
  3. 다시 배열을 순회하면서 각 요소 nums[i]mul / nums[i](자기 자신을 제외한 나머지 요소들의 곱)와 같은지 확인합니다.
  4. 조건을 만족하는 요소가 있으면 True를 반환하고, 끝까지 없으면 False를 반환합니다.

구현 코드

def solve(nums):
    mul = 1
    for i in range(len(nums)):
        mul *= nums[i]

    for i in range(len(nums)):
        if nums[i] == mul / nums[i]:
            return True

    return False

nums = [3, 2, 24, 4, 1]
print(solve(nums))

입력

[3, 2, 24, 4, 1]

출력

True

동작 원리 살펴보기

위 코드에서 첫 번째 루프는 배열 전체의 곱인 mul = 3 × 2 × 24 × 4 × 1 = 576을 계산합니다. 두 번째 루프에서는 각 요소에 대해 자기 자신을 제외한 곱을 비교합니다.

  • nums[0] = 3 → 576 / 3 = 192 ≠ 3
  • nums[1] = 2 → 576 / 2 = 288 ≠ 2
  • nums[2] = 24 → 576 / 24 = 24 ✓ 조건 만족!

따라서 함수는 True를 반환합니다.

복잡도 분석

  • 시간 복잡도: O(n) — 배열을 두 번 순회하므로 선형 시간이 걸립니다.
  • 공간 복잡도: O(1) — 추가 변수 mul 하나만 사용합니다.

주의 사항

이 방법은 나눗셈 연산을 사용하기 때문에 배열에 0이 포함된 경우 주의해야 합니다. 0으로 나누게 되면 오류가 발생할 수 있으므로, 실제 구현 시에는 0의 개수를 세어 처리하는 로직을 추가하는 것이 안전합니다. 또한 정확한 정수 비교가 필요하다면 나눗셈 대신 전체 곱을 제수 없이 비교하는 방식(예: 각 위치별 좌우 누적 곱 활용)을 고려할 수 있습니다.