본문 바로가기
Beakjoon&프로그래머스/Java

[LeetCode/Java] Product of Array Except Self

by 현장 2025. 12. 31.

- Code

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int size = nums.length;
        // 왼쪽 오른쪽 누적 곱 저장 배열
        int[] mulLeft = new int[size];
        int[] mulRight = new int[size];
		// 각 사용할 초기 값
        int left = 1, right = 1;
		// 배열에 저장
        for (int i = 0; i < size; i++) {
            left *= nums[i];
            mulLeft[i] = left;
            right *= nums[size -i - 1];
            mulRight[size -i - 1] = right;
        }
		// 현재 인덱스 제외 누적곱 계산
        int[] answer = new int[size];
        for (int i = 0; i < size; i++) {
            int num1 = i > 0 ? mulLeft[i - 1] : 1;
            int num2 = i < size - 1 ? mulRight[i + 1] : 1;
            answer[i] = num1 * num2;
        }

        return answer;
    }
}

왼쪽과 오른쪽 누적곱을 나눠서 하는 방식에 힌트를 받고 해결했으나 복잡했습니다. 그래서 다른 힌드를 보고 아래와 같이 추가로 해결해 봤습니다.

public static int[] productExceptSelf(int[] nums) {
        int size = nums.length;
        int[] answer = new int[size];
        int left = 1, right = 1;
        // 왼쪽 누적 곱을 answer에 저장
        // 처음은 자기 자신이므로 1
        for (int i = 0; i < size; i++) {
            answer[i] = left;
            left *= nums[i];
        }

        // 거꾸로 돌면서 계산
        for (int i = size - 1; i >= 0 ; i--) {
            answer[i] = nums[i] * right;
            right *= nums[i];
        }

        return answer;
    }