From 44c8ea7244cc297b24f8708fccff2b9a0ef59be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=91=90=EB=A6=AC?= Date: Sat, 3 May 2025 15:22:01 +0900 Subject: [PATCH 1/4] Solution Best Time to Buy and Sell Stock --- best-time-to-buy-and-sell-stock/doitduri.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 best-time-to-buy-and-sell-stock/doitduri.swift diff --git a/best-time-to-buy-and-sell-stock/doitduri.swift b/best-time-to-buy-and-sell-stock/doitduri.swift new file mode 100644 index 000000000..69d5c2b7b --- /dev/null +++ b/best-time-to-buy-and-sell-stock/doitduri.swift @@ -0,0 +1,18 @@ +class Solution { + func maxProfit(_ prices: [Int]) -> Int { + guard var anchor = prices.first, prices.count > 1 else { + return 0 + } + + var result = 0 + for price in prices { + if price < anchor { + anchor = price + } else if price - anchor > result { + result = price - anchor + } + } + + return result + } +} From 425262dad77fd6eee8f4ce08b1d703357a04ed0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=91=90=EB=A6=AC?= Date: Sat, 3 May 2025 15:45:22 +0900 Subject: [PATCH 2/4] Solution Group Anagrams --- group-anagrams/doitduri.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 group-anagrams/doitduri.swift diff --git a/group-anagrams/doitduri.swift b/group-anagrams/doitduri.swift new file mode 100644 index 000000000..36dd78e3b --- /dev/null +++ b/group-anagrams/doitduri.swift @@ -0,0 +1,16 @@ +class Solution { + func groupAnagrams(_ strs: [String]) -> [[String]] { + var groups: [String: [String]] = [:] + + for str in strs { + let sortedStr = String(str.sorted()) + + var values = groups[sortedStr] ?? [] + values.append(str) + + groups[sortedStr] = values + } + + return Array(groups.values) + } +} From 87883304fae3a81be02c6f246d10e21712a9b305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=91=90=EB=A6=AC?= Date: Sat, 3 May 2025 16:28:40 +0900 Subject: [PATCH 3/4] Solution Word break --- word-break/doitduri.swift | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 word-break/doitduri.swift diff --git a/word-break/doitduri.swift b/word-break/doitduri.swift new file mode 100644 index 000000000..57d9097d9 --- /dev/null +++ b/word-break/doitduri.swift @@ -0,0 +1,26 @@ +class Solution { + func wordBreak(_ s: String, _ wordDict: [String]) -> Bool { + let wordSet = Set(wordDict) + var dp = Array(repeating: false, count: s.count + 1) + + dp[0] = true + + for i in 1...s.count { + for j in 0.. Date: Sat, 3 May 2025 17:19:50 +0900 Subject: [PATCH 4/4] Solution Implement trie prefix tree --- implement-trie-prefix-tree/doitduri.swift | 46 +++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 implement-trie-prefix-tree/doitduri.swift diff --git a/implement-trie-prefix-tree/doitduri.swift b/implement-trie-prefix-tree/doitduri.swift new file mode 100644 index 000000000..688add953 --- /dev/null +++ b/implement-trie-prefix-tree/doitduri.swift @@ -0,0 +1,46 @@ +class TrieNode { + var children: [Character: TrieNode] = [:] + var isEnd: Bool = false +} + +class Trie { + private let root: TrieNode + + init() { + root = TrieNode() + } + + func insert(_ word: String) { + var current = root + for char in word { + if current.children[char] == nil { + current.children[char] = TrieNode() + } + current = current.children[char]! + } + current.isEnd = true + } + + func search(_ word: String) -> Bool { + guard let node = findNode(word) else { + return false + } + return node.isEnd + } + + func startsWith(_ prefix: String) -> Bool { + return findNode(prefix) != nil + } + + private func findNode(_ prefix: String) -> TrieNode? { + var current = root + for char in prefix { + guard let next = current.children[char] else { + return nil + } + current = next + } + return current + } +} +