
- 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;
}'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [LeetCode/Java] Reverse Linked List (0) | 2026.01.01 |
|---|---|
| [백준/Java] 27487번 One and Two (0) | 2026.01.01 |
| [LeetCode/Java] Min Cost Climbing Stairs (0) | 2025.12.31 |
| [LeetCode/Java] N-th Tribonacci Number (0) | 2025.12.31 |
| [백준/Java] 3018번 캠프파이어 (0) | 2025.12.31 |