From 66ceabda5a234d49f2263f02042e53203cf7b35a Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Thu, 9 Jan 2025 18:00:50 +0900 Subject: [PATCH 1/7] feat: Best Time to Buy And Sell Stock #221 --- .../donghyeon95.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 best-time-to-buy-and-sell-stock/donghyeon95.java diff --git a/best-time-to-buy-and-sell-stock/donghyeon95.java b/best-time-to-buy-and-sell-stock/donghyeon95.java new file mode 100644 index 000000000..ec1cee5e0 --- /dev/null +++ b/best-time-to-buy-and-sell-stock/donghyeon95.java @@ -0,0 +1,23 @@ +class Solution { + public int maxProfit(int[] prices) { + int result = 0; + int maxProfit = 0; + int buyStock = prices[0]; + + // 한번 돌면서 나보다 작은 것이 나올 때까지 이익을 본다 + + + for (int price: prices) { + // 나보다 작은 게 나오면 MAX 이익을 갱신하고 거기부서 다시 시작한다. + if (price < buyStock) { + result = Math.max(result, maxProfit); + maxProfit = 0; + buyStock = price; + } else { + maxProfit = Math.max(price - buyStock, maxProfit); + } + } + + return Math.max(result, maxProfit); + } +} \ No newline at end of file From a8e721c126df26926d7cfd53591e187e622de3b2 Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Sat, 11 Jan 2025 17:54:02 +0900 Subject: [PATCH 2/7] feat: Group Anagrams #236 --- group-anagrams/donghyeon95.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 group-anagrams/donghyeon95.java diff --git a/group-anagrams/donghyeon95.java b/group-anagrams/donghyeon95.java new file mode 100644 index 000000000..deaf5f555 --- /dev/null +++ b/group-anagrams/donghyeon95.java @@ -0,0 +1,27 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +class Solution { + public List> groupAnagrams(String[] strs) { + // 문자열 정렬을 해서 같은 애들 모음을 주면 되지 않을까?? + // 이럴 경우 정렬에 많은 시간을 소모 + + HashMap> hm = new HashMap<>(); + for (String str: strs) { + String arrangedStr = rearangeStr(str); + hm.putIfAbsent(arrangedStr, new ArrayList<>()); + hm.get(arrangedStr).add(str); + } + + return hm.values().stream().toList(); + } + + public String rearangeStr (String str) { + char[] chars = str.toCharArray(); + Arrays.sort(chars); + + return new String(chars); + } +} \ No newline at end of file From 66fab2ab487073cca1e4d5af6e5ca7ada1a50e64 Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Sat, 11 Jan 2025 17:54:12 +0900 Subject: [PATCH 3/7] feat: Group Anagrams #236 --- group-anagrams/donghyeon95.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/group-anagrams/donghyeon95.java b/group-anagrams/donghyeon95.java index deaf5f555..7765cfd21 100644 --- a/group-anagrams/donghyeon95.java +++ b/group-anagrams/donghyeon95.java @@ -24,4 +24,5 @@ public String rearangeStr (String str) { return new String(chars); } -} \ No newline at end of file +} + From d74ceb733900c11d9154224d78c2a64a9f67aee1 Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Sat, 11 Jan 2025 18:42:38 +0900 Subject: [PATCH 4/7] feat: Encode and Decode Strings #238 --- encode-and-decode-strings/donghyeon95.java | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 encode-and-decode-strings/donghyeon95.java diff --git a/encode-and-decode-strings/donghyeon95.java b/encode-and-decode-strings/donghyeon95.java new file mode 100644 index 000000000..6e512de3e --- /dev/null +++ b/encode-and-decode-strings/donghyeon95.java @@ -0,0 +1,57 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class Solution { + /* + * @param strs: a list of strings + * @return: encodes a list of strings to a single string. + */ + String cDel = "&"; + String sDel = ";"; + + // Encodes a list of strings to a single string + public String encode(List strs) { + if (strs.isEmpty()) return null; + + StringBuilder result = new StringBuilder(); + for (int i =0; i decode(String str) { + if (str==null) + return new ArrayList<>(); + + List result = new ArrayList<>(); + String[] strs = str.split(sDel, -1); + for (String s : strs) { + if (s.isEmpty()) { + result.add(""); + continue; + } + String[] chars = s.split(cDel); + String decoded = Arrays.stream(chars) + .filter(sr -> !sr.isEmpty()) + .mapToInt(Integer::parseInt) + .mapToObj(ascii -> (char) ascii) + .map(String::valueOf) + .collect(Collectors.joining()); + result.add(decoded); + } + return result; + } +} + + From 660987647fed66d44e501c1e97e4b15c6a85564d Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Sat, 11 Jan 2025 20:25:54 +0900 Subject: [PATCH 5/7] feat: Implement Trie Prefix Tree #256 --- implement-trie-prefix-tree/donghyeon95.java | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 implement-trie-prefix-tree/donghyeon95.java diff --git a/implement-trie-prefix-tree/donghyeon95.java b/implement-trie-prefix-tree/donghyeon95.java new file mode 100644 index 000000000..170ced911 --- /dev/null +++ b/implement-trie-prefix-tree/donghyeon95.java @@ -0,0 +1,29 @@ +import java.util.HashMap; + +class Trie { + HashMap trie; + public Trie() { + trie = new HashMap<>(); + } + + public void insert(String word) { + StringBuilder sb = new StringBuilder(); + for (char c: word.toCharArray()) { + sb.append(c); + trie.putIfAbsent(sb.toString(), false); + } + trie.put(sb.toString(), true); + } + + public boolean search(String word) { + return trie.getOrDefault(word, false); + } + + public boolean startsWith(String prefix) { + return trie.containsKey(prefix); + } +} + + + + From e624c7ba8138aac3ecc9728ef8f3afabe3abfc76 Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Sat, 11 Jan 2025 22:13:42 +0900 Subject: [PATCH 6/7] feat: Word Break #271 --- word-break/donghyeon95.java | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 word-break/donghyeon95.java diff --git a/word-break/donghyeon95.java b/word-break/donghyeon95.java new file mode 100644 index 000000000..667ffc2fb --- /dev/null +++ b/word-break/donghyeon95.java @@ -0,0 +1,41 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +class Solution { + public boolean wordBreak(String s, List wordDict) { + return dfs(s, wordDict, new HashSet<>()); + } + + private boolean dfs(String s, List wordDict, Set dp) { + // 종료 조건: 문자열이 비어 있으면 성공 + if (s.isEmpty()) return true; + + // 중복 탐색 방지 + if (dp.contains(s)) return false; + + for (String word : wordDict) { + if (s.startsWith(word)) { + // 단어를 제거하고 재귀 호출 + if (dfs(s.substring(word.length()), wordDict, dp)) { + return true; + } + } + } + + // 단어를 제거하지 않고 넘어가는 경우도 탐색 + dp.add(s); // 탐색이 실패한 상태 저장 + return false; + } +} + + + From 2325e53b4665efcf4714c387b78ebf10d70e2b47 Mon Sep 17 00:00:00 2001 From: donghyeon95 Date: Sat, 11 Jan 2025 22:17:03 +0900 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20=EC=A4=84=EB=B0=94=EA=BF=88=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- best-time-to-buy-and-sell-stock/donghyeon95.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/best-time-to-buy-and-sell-stock/donghyeon95.java b/best-time-to-buy-and-sell-stock/donghyeon95.java index ec1cee5e0..465df0408 100644 --- a/best-time-to-buy-and-sell-stock/donghyeon95.java +++ b/best-time-to-buy-and-sell-stock/donghyeon95.java @@ -20,4 +20,5 @@ public int maxProfit(int[] prices) { return Math.max(result, maxProfit); } -} \ No newline at end of file +} +