정수 배열 nums가 주어졌을 때, answer[i] 가 nums[i] 를 제외한 nums의 모든 요소들의 곱과 같도록 하는 배열 answer를 반환하십시오. nums의 어떤 접두사(prefix)나 접미사(suffix)의 곱은 32비트 정수 범위에 들어갈 것임이 보장됩니다.
** 이 알고리즘은 O(n) 시간에 실행되어야 하며, 나눗셈 연산을 사용하지 않아야 합니다.
Example 1:
Input: nums = [1,2,3,4]
Output: [24,12,8,6]
Example 2:
Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]
public int[] productExceptSelf(int[] nums) {
// 결과로 반환할 배열 초기화
int[] answer = new int[nums.length];
// prefix: 왼쪽 요소들의 누적 곱 계산
answer[0] = 1;
for (int i = 1; i < nums.length; i++) {
answer[i] = nums[i - 1] * answer[i - 1];
}
// suffix: 오른쪽 요소들의 누적 곱 계산하며 결과 배열에 곱해
int right = 1;
for (int i = nums.length-1; i >= 0; i--) {
answer[i] *= right;
right *= nums[i];
}
return answer;
}