728x90
반응형
문제 설명
1. 배열이 주어진다.
2. 지금 위치 빼고 나머지의 곱셈을 구하면 된다.
3. Int 크기 내에서 정답이 나온다.
풀이 과정
1. 깡구현
2. 전체 곱을 구해두고 거기서 지금 값을 나누면 될거라 생각했다(근데 전체 곱은 int 범위를 벗어날 수 있으므로 long)
3. 0이 2개 이상인 경우 모든 경우 다 0이다.
4. 0이 1개인 경우 그 0이 있는 위치는 나머지 전체 곱이고, 나머지 모든 곳에서는 0이 나온다.
코드
class Solution {
public int[] productExceptSelf(int[] nums) {
int[] answer = new int[nums.length];
long allMul = 1; // 전체를 곱할 때 사용하는 allMul
boolean containsZero = false; // 하나라도 0 을 포함하는지 여부
boolean containsDoubleZero = false; // 0이 두개 이상인지 여부
for(int num : nums) {
if(num == 0) {
if(containsZero) containsDoubleZero = true;
containsZero = true;
}
else allMul *= num; // 전체 곱을 구한다. (0은 곱하지 않는다.)
}
// 0이 두개 이상이라면 모든 곱셈이 다 0이 나올 수밖에 없다.
if(containsDoubleZero) return answer;
for(int i=0; i<answer.length; i++) {
if(nums[i] != 0) { // 지금 값이 0이 아니라면
if (containsZero) answer[i] = 0; // 다른 곳에 0이 있다면 무조건 0
else answer[i] = (int)(allMul / nums[i]); // 다른 곳에 0이 없다면 지금꺼만 나눠줌
} else {
answer[i] = (int) allMul; // 이게 0이고, 0은 1개만 있으므로 모든 값의 곱이 정답이 된다.
}
}
return answer;
}
}
반응형
'알고리즘 공부' 카테고리의 다른 글
[leetcode - 68. Text Justification] java (0) | 2025.01.31 |
---|---|
[leetcode - 42. Trapping Rain Water] java (0) | 2025.01.30 |
[leetcode - 380. Insert Delete GetRandom O(1)] java (0) | 2025.01.29 |
[leetcode - 274. H-Index] java (4) | 2025.01.29 |
[leetcode - 45. Jump Game II] java (1) | 2025.01.28 |