From aa93499f47096f055b4b4eae2bbde0d197d95df7 Mon Sep 17 00:00:00 2001 From: Heejin Ham Date: Mon, 3 Feb 2025 22:59:24 +0900 Subject: [PATCH 1/4] [week9](gmlwls96) Linked List Cycle --- linked-list-cycle/gmlwls96.kt | 16 ++++++++++++++++ .../gmlwls96.kt | 16 ---------------- 2 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 linked-list-cycle/gmlwls96.kt delete mode 100644 longest-substring-without-repeating-characters/gmlwls96.kt diff --git a/linked-list-cycle/gmlwls96.kt b/linked-list-cycle/gmlwls96.kt new file mode 100644 index 000000000..76e444ef4 --- /dev/null +++ b/linked-list-cycle/gmlwls96.kt @@ -0,0 +1,16 @@ +class Solution { + // 시간 : O(n) + // 세트에 head.val 값을 추가하면서 동일한 값이 있는지 체크. 동일한 값이 존재하면 순회한다고 판단. + fun hasCycle(head: ListNode?): Boolean { + val set = mutableSetOf() + var next = head + while (next != null) { + if (set.contains(next.`val`)) { + return true + } + set.add(next.`val`) + next = next.next + } + return false + } +} diff --git a/longest-substring-without-repeating-characters/gmlwls96.kt b/longest-substring-without-repeating-characters/gmlwls96.kt deleted file mode 100644 index 33808e5cc..000000000 --- a/longest-substring-without-repeating-characters/gmlwls96.kt +++ /dev/null @@ -1,16 +0,0 @@ -class Solution { - // 시간 : O(n) 공간 : O(n) - fun lengthOfLongestSubstring(s: String): Int { - var max = 0 - val subStr = StringBuffer() - s.forEach { // s를 조회하면서 글자를 subStr에 담는다. - if (subStr.contains(it)) { // 단, 겹치는 글자가 있을경우 subStr의 len을 기록하고, 초기화 한다. - max = max(max, subStr.length) - subStr.delete(0, subStr.length) - } - subStr.append(it) - } - max = max(max, subStr.length) - return max - } -} From f7d4d2de7ff010e56157593395fd1788b6cf0a3c Mon Sep 17 00:00:00 2001 From: Heejin Ham Date: Wed, 5 Feb 2025 22:34:40 +0900 Subject: [PATCH 2/4] [week9](gmlwls96) Find Minimum in Rotated Sorted Array --- .../gmlwls96.kt | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/gmlwls96.kt diff --git a/find-minimum-in-rotated-sorted-array/gmlwls96.kt b/find-minimum-in-rotated-sorted-array/gmlwls96.kt new file mode 100644 index 000000000..b28d5781d --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/gmlwls96.kt @@ -0,0 +1,24 @@ +class Solution { + // 시간 : O(logN) 공간 : O(1) + // 이분탐색. + fun findMin(nums: IntArray): Int { + var left = 0 + var right = nums.lastIndex + + while (left <= right){ + val mid = (left + right)/2 + when{ + nums[mid-1] > nums[mid] -> { + return nums[mid] + } + nums[0] < nums[mid] -> { + left = mid + 1 + } + else -> { + right = mid -1 + } + } + } + return nums[0] + } +} From d9f0c2c7989fb30085074ca13b6d7fc06c815ad5 Mon Sep 17 00:00:00 2001 From: Heejin Ham Date: Thu, 6 Feb 2025 22:52:46 +0900 Subject: [PATCH 3/4] [week9](gmlwls96) Maximum Product Subarray --- maximum-product-subarray/gmlwls96.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 maximum-product-subarray/gmlwls96.kt diff --git a/maximum-product-subarray/gmlwls96.kt b/maximum-product-subarray/gmlwls96.kt new file mode 100644 index 000000000..45f7c28e0 --- /dev/null +++ b/maximum-product-subarray/gmlwls96.kt @@ -0,0 +1,15 @@ +class Solution { + fun maxProduct(nums: IntArray): Int { + var max = 1 + var min = 1 + var result = nums[0] + nums.forEach { num -> + val v1 = min * num + val v2 = max * num + min = min(min(v1, v2), num) + max = max(max(v1, v2), num) + result = max(max, result) + } + return result + } +} From 79a20bbc8da0a464cf1e52e89dd3604746e96bdd Mon Sep 17 00:00:00 2001 From: Heejin Ham Date: Thu, 6 Feb 2025 23:58:23 +0900 Subject: [PATCH 4/4] [week9](gmlwls96) Minimum Window Substring --- minimum-window-substring/gmlwls96.kt | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 minimum-window-substring/gmlwls96.kt diff --git a/minimum-window-substring/gmlwls96.kt b/minimum-window-substring/gmlwls96.kt new file mode 100644 index 000000000..0f62c888e --- /dev/null +++ b/minimum-window-substring/gmlwls96.kt @@ -0,0 +1,32 @@ +class Solution { + fun minWindow(s: String, t: String): String { + if (s.length < t.length) { + return "" + } + val containIndexList = mutableListOf() + for (i in s.indices) { + if (t.contains(s[i])) { + containIndexList.add(i) + } + } + var answer = "" + val regex = + t.toCharArray().joinToString(separator = "", prefix = "^", postfix = ".+$") { """(?=.*${it})""" }.toRegex() + for (i in 0..containIndexList.size - t.length) { + val startIndex = containIndexList[i] + for (l in t.length..containIndexList.size - i) { + val endIndex = containIndexList[(i + l) - 1] + 1 + val subStr = s.substring(startIndex, endIndex) + if (regex.containsMatchIn(subStr)) { + if (answer.isEmpty()) { + answer = subStr + } else if (subStr.length < answer.length) { + answer = subStr + } + break + } + } + } + return answer + } +}