티스토리 뷰

제약 조건이 없다면 미리 값들을 모두 곱한 다음에 이터레이터가 되는 값을 나눠서 간단하게 구할 수 있지만... 제약조건이 있기 때문에 시간 복잡도를 맞추기 위해서는 이터레이터가 되는 값의 왼쪽을 모두 곱한 결과에 오른쪽 값을 모두 곱한 값을 곱해줘서 구해볼 수 있다. (이것도 한참 고민하다가 모범 답안을 본 건데, 진짜 미친 풀이인 거 같다...)

from typing import List


def multiply(nums_list: List[int]) -> List[int]:
    result = []
    left_p = 1
    right_p = 1

    # 이터레이터 기준 왼쪽 값들의 곱을 저장
    for i in range(0, len(nums_list)):
        result.append(left_p)
        left_p *= nums_list[i]

    # 이터레이터 기준 오른쪽 값들의 곱을 저장
    for i in range(len(nums_list) - 1, 0 - 1, -1):
        result[i] *= right_p
        right_p *= nums_list[i]

    return result


if __name__ == '__main__':
    nums = [1, 2, 3, 4]
    print(multiply(nums))

이러면 간단하게 결과를 구할 수 있다. 위 풀이 방법은 배열의 곱이나 합을 구할 때 유용하게 쓰일 거 같으니, 반드시 기억해두자

Comments