From 2904515e1803d4d07d0a0d507bb1e8e81e7fb37c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95?= Date: Sun, 16 Nov 2025 15:38:45 +0900 Subject: [PATCH 1/2] 3sum --- 3sum/jaejeong1.java | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 3sum/jaejeong1.java diff --git a/3sum/jaejeong1.java b/3sum/jaejeong1.java new file mode 100644 index 0000000000..0f610905c5 --- /dev/null +++ b/3sum/jaejeong1.java @@ -0,0 +1,34 @@ +class Solution { + public List> threeSum(int[] nums) { + // 전체 시간 복잡도: O(N2), 공간 복잡도: O(N) + // 정렬: 시간 복잡도: O(N log N) + Arrays.sort(nums); + List> result = new ArrayList<>(); + // x 하나 잡아놓고, 투포인터 사용해서 y + z 가 -x 보다 크면 z 를 - 1, 적으면 y 를 + 1, y와 z가 만나면 break, y + z 가 -x 와 같으면 정답 + // 0 보다 큰 케이스는 돌 필요가 없음 + for (int i = 0; i < nums.length && nums[i] <= 0; ++i) { + // 시간 복잡도: O(N) + if (i == 0 || nums[i - 1] != nums[i]) { + findThreeSum(nums, i, result); + } + } + return result; + } + + void findThreeSum(int[] nums, int i, List> result) { + // 시간 복잡도: O(N), 공간 복잡도: O(3N) = O(N) + int left = i + 1, right = nums.length - 1; + while (left < right) { + int sum = nums[i] + nums[left] + nums[right]; + if (sum < 0) { + ++left; + } else if (sum > 0) { + --right; + } else { + // 정답 케이스 찾아서 결과에 넣기 + result.add(Arrays.asList(nums[i], nums[left++], nums[right--])); + while (left < right && nums[left] == nums[left - 1]) ++left; // 숫자 중복인 케이스 넘어가기 + } + } + } +} \ No newline at end of file From bd09a9ef593adbe78e7e36f8788bb7338fe6865a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95?= Date: Sun, 16 Nov 2025 15:42:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EA=B0=9C=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3sum/jaejeong1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3sum/jaejeong1.java b/3sum/jaejeong1.java index 0f610905c5..f7b20b7f14 100644 --- a/3sum/jaejeong1.java +++ b/3sum/jaejeong1.java @@ -31,4 +31,4 @@ void findThreeSum(int[] nums, int i, List> result) { } } } -} \ No newline at end of file +}