From e81454f0883ca69a462686fbb326407f93f9a08c Mon Sep 17 00:00:00 2001 From: JIA Date: Wed, 30 Jul 2025 01:24:40 +0900 Subject: [PATCH 1/5] solving product of array --- house-robber/Geegong.java | 2 + product-of-array-except-self/Geegong.java | 50 +++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 house-robber/Geegong.java create mode 100644 product-of-array-except-self/Geegong.java diff --git a/house-robber/Geegong.java b/house-robber/Geegong.java new file mode 100644 index 000000000..72b633cba --- /dev/null +++ b/house-robber/Geegong.java @@ -0,0 +1,2 @@ +package leetcode_study;public class Geegong { +} diff --git a/product-of-array-except-self/Geegong.java b/product-of-array-except-self/Geegong.java new file mode 100644 index 000000000..dbfa2636b --- /dev/null +++ b/product-of-array-except-self/Geegong.java @@ -0,0 +1,50 @@ +import java.util.Arrays; + +public class Geegong { + + /** + * Time complexity : O(n) + * Space complexity : O(1) (except result) + * + * 풀이 : prefix array , suffix array 를 각 배열마다 구하여 각 array에 해당되는 인덱스의 값들을 곱하여 결과값을 도출 + * + * @param nums + * @return + */ + public int[] productExceptSelf(int[] nums) { + + int[] result = new int[nums.length]; + + // 1. result 는 먼저 prefix 배열들의 곱으로 채운다. + // ( prefix 배열이란 해당되는 index 이전의 배열요소값들을 의미) + + // 앞에서부터 누적되는 총 곱의 값 + int accumulatedProduct = 1; + for (int index=0; index= 0; index--) { + if (index == nums.length - 1) { + accumulatedProduct = nums[index]; + continue; + } + + result[index] = result[index] * accumulatedProduct; + accumulatedProduct = accumulatedProduct * nums[index]; + } + + return result; + } + +} From 5be47b123c718a8910ebb1df695fc22db9245317 Mon Sep 17 00:00:00 2001 From: JIA Date: Wed, 30 Jul 2025 01:31:32 +0900 Subject: [PATCH 2/5] add newline --- product-of-array-except-self/Geegong.java | 1 + 1 file changed, 1 insertion(+) diff --git a/product-of-array-except-self/Geegong.java b/product-of-array-except-self/Geegong.java index dbfa2636b..06f01a071 100644 --- a/product-of-array-except-self/Geegong.java +++ b/product-of-array-except-self/Geegong.java @@ -48,3 +48,4 @@ public int[] productExceptSelf(int[] nums) { } } + From 09fbb143262fddfee89b77c684bec98d39e8da9a Mon Sep 17 00:00:00 2001 From: JIA Date: Wed, 30 Jul 2025 01:32:03 +0900 Subject: [PATCH 3/5] add newline --- house-robber/Geegong.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/house-robber/Geegong.java b/house-robber/Geegong.java index 72b633cba..0fa2a7832 100644 --- a/house-robber/Geegong.java +++ b/house-robber/Geegong.java @@ -1,2 +1,4 @@ -package leetcode_study;public class Geegong { +public class Geegong { + // 이 문제는 시간이 남을때 풀 예정 😅 } + From 874fa1775acc87be13141307ba2900efbd150af0 Mon Sep 17 00:00:00 2001 From: JIA Date: Fri, 1 Aug 2025 01:15:06 +0900 Subject: [PATCH 4/5] resolve 3sum --- 3sum/Geegong.java | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 3sum/Geegong.java diff --git a/3sum/Geegong.java b/3sum/Geegong.java new file mode 100644 index 000000000..79c23536c --- /dev/null +++ b/3sum/Geegong.java @@ -0,0 +1,73 @@ +import java.util.*; + +public class Geegong { + + public List> threeSum(int[] nums) { + + // 중복되는 값은 없어야 하기에 HashSet 으로 result + HashSet> result = new HashSet<>(); + + // Key : 배열 원소 , value : List 인덱스들 + // elementMap 은 two pointer 의 값을 더한 값에서 0이 되기 위한 요소를 찾기위해 사용될 것임 + Map> elementMap = new HashMap<>(); + for (int index = 0; index indices = elementMap.get(value); + indices.add(index); + elementMap.put(value, indices); + } else { + List newIndices = new ArrayList<>(); + newIndices.add(index); + elementMap.put(value, newIndices); + } + } + + // leftIndex : 0에서 부터 시작하는 index + // rightIndex : nums.length - 1에서부터 감소하는 index + // leftIndex > rightIndex 되는 순간까지만 for문을 돌 것이다. + for (int leftIndex=0; leftIndex < nums.length; leftIndex++) { + for (int rightIndex=nums.length - 1; rightIndex >= 0; rightIndex--) { + + if (leftIndex >= rightIndex) { + break; + } + + + int leftValue = nums[leftIndex]; + int rightValue = nums[rightIndex]; + + int neededValueToZero = -leftValue - rightValue; + if (elementMap.containsKey(neededValueToZero)) { + // elementMap의 value 가 leftIndex, rightIndex 은 아닌지 확인 + + List indices = elementMap.get(neededValueToZero); + // zero 를 만들 수 있는 세번쨰 인덱스가 있는지 확인 + int thirdIndex = findThirdIndexToBeZero(leftIndex, rightIndex, indices); + if (-1 != thirdIndex) { + List newOne = new ArrayList<>(); + newOne.add(nums[leftIndex]); + newOne.add(nums[rightIndex]); + newOne.add(nums[thirdIndex]); + result.add(newOne.stream().sorted().toList()); + } + + } + + } + } + + return result.stream().toList(); + + } + + public int findThirdIndexToBeZero(int leftIndex, int rightIndex, List indices) { + for (int index : indices) { + if (index != leftIndex && index != rightIndex) { + return index; + } + } + + return -1; + } +} From 05655f1af5d8e01b6e1b84affca23c526f1bad27 Mon Sep 17 00:00:00 2001 From: JIA Date: Fri, 1 Aug 2025 01:22:41 +0900 Subject: [PATCH 5/5] add tc, sc --- 3sum/Geegong.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/3sum/Geegong.java b/3sum/Geegong.java index 79c23536c..83fbd59d6 100644 --- a/3sum/Geegong.java +++ b/3sum/Geegong.java @@ -2,6 +2,12 @@ public class Geegong { + /** + * Time complexity : O(n^2) + * space complexity : O(n^2) + * @param nums + * @return + */ public List> threeSum(int[] nums) { // 중복되는 값은 없어야 하기에 HashSet 으로 result @@ -9,6 +15,7 @@ public List> threeSum(int[] nums) { // Key : 배열 원소 , value : List 인덱스들 // elementMap 은 two pointer 의 값을 더한 값에서 0이 되기 위한 요소를 찾기위해 사용될 것임 + // tc : O(n) Map> elementMap = new HashMap<>(); for (int index = 0; index> threeSum(int[] nums) { // leftIndex : 0에서 부터 시작하는 index // rightIndex : nums.length - 1에서부터 감소하는 index // leftIndex > rightIndex 되는 순간까지만 for문을 돌 것이다. + // tc : O(N^2 / 2) for (int leftIndex=0; leftIndex < nums.length; leftIndex++) { for (int rightIndex=nums.length - 1; rightIndex >= 0; rightIndex--) { @@ -71,3 +79,4 @@ public int findThirdIndexToBeZero(int leftIndex, int rightIndex, List i return -1; } } +