From a8d626502c19e5bb8bb3111ba82fcdcc5dd6d6e6 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Thu, 15 Aug 2024 20:00:33 +0900 Subject: [PATCH 1/7] contains duplicate solution --- contains-duplicate/jaejeong1.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 contains-duplicate/jaejeong1.java diff --git a/contains-duplicate/jaejeong1.java b/contains-duplicate/jaejeong1.java new file mode 100644 index 000000000..aa7fd79f9 --- /dev/null +++ b/contains-duplicate/jaejeong1.java @@ -0,0 +1,16 @@ +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +class SolutionJaeJeong1 { + public boolean containsDuplicate(int[] nums) { + // 해시맵 사용해서 같은 값의 카운트가 1보다 크면 true 반환 + // 끝까지 다 돌면 false 반환 + // 또는 해시셋 사용해서 모두 해시셋에 넣고 + // 길이 비교해서 같으면 false, 다르면 true 반환 + // 시간복잡도: O(N), 공간복잡도: O(N) + + Set set = Arrays.stream(nums).collect(HashSet::new, Set::add, Set::addAll); + return set.size() != nums.length; + } +} \ No newline at end of file From 6a12988cdbc537e06e27c3a857722cbae6cc3965 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Thu, 15 Aug 2024 21:11:00 +0900 Subject: [PATCH 2/7] number of 1 bits solution --- number-of-1-bits/jaejeong1.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 number-of-1-bits/jaejeong1.java diff --git a/number-of-1-bits/jaejeong1.java b/number-of-1-bits/jaejeong1.java new file mode 100644 index 000000000..83ddc7fc9 --- /dev/null +++ b/number-of-1-bits/jaejeong1.java @@ -0,0 +1,14 @@ +class SolutionJaejeong1 { + public int hammingWeight(int n) { + // 주어진 양의 정수를 이진수로 변환하고, 1로 설정된 자릿수의 개수를 반환 + // 시간복잡도: O(1), 공간복잡도: O(1) + int num = 0; + for (int i=0; i<32; i++) { + if((n & 1) == 1) { + num++; + } + n = n >> 1; + } + return num; + } +} \ No newline at end of file From bcd0ee8c0469517fb7e65df7f1753fa24953bcac Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Thu, 15 Aug 2024 22:06:37 +0900 Subject: [PATCH 3/7] top k frequent elements solution --- top-k-frequent-elements/jaejeong1.java | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 top-k-frequent-elements/jaejeong1.java diff --git a/top-k-frequent-elements/jaejeong1.java b/top-k-frequent-elements/jaejeong1.java new file mode 100644 index 000000000..768c7e9f7 --- /dev/null +++ b/top-k-frequent-elements/jaejeong1.java @@ -0,0 +1,27 @@ +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +class SolutionTopKFrequentElements { + public int[] topKFrequent(int[] nums, int k) { + // 빈도순으로 k개 반환 + // 빈도 체크: 해시맵으로 카운트. 시간복잡도 O(N), 공간복잡도 O(N) + // 빈도순 정렬: sorting, 시간복잡도 O(N log N), 공간복잡도 O(N) + // 합산: 시간복잡도 O(N log N), 공간복잡도 O(N) + + // 빈도 체크 + Map freq = new HashMap<>(); + for (int num : nums) { + freq.put(num, freq.getOrDefault(num, 0) + 1); + } + + // 빈도순 정렬 + int[] sortedNums = freq.keySet().stream() + .sorted((a, b) -> freq.get(b) - freq.get(a)) + .mapToInt(i -> i) + .toArray(); + + // 배열에서 상위 k개만 반환 + return Arrays.copyOf(sortedNums, k); + } +} \ No newline at end of file From 6b783a740bd141489b466ec84e80279e42c9519c Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Fri, 16 Aug 2024 22:48:43 +0900 Subject: [PATCH 4/7] Kth Smallest Element in a BST solution --- kth-smallest-element-in-a-bst/jaejeong1.java | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 kth-smallest-element-in-a-bst/jaejeong1.java diff --git a/kth-smallest-element-in-a-bst/jaejeong1.java b/kth-smallest-element-in-a-bst/jaejeong1.java new file mode 100644 index 000000000..e67c985a4 --- /dev/null +++ b/kth-smallest-element-in-a-bst/jaejeong1.java @@ -0,0 +1,36 @@ +import java.util.ArrayList; +import java.util.List; + +// Definition for a binary tree node. +class TreeNode { + int val; + TreeNode left; + TreeNode right; + TreeNode() {} + TreeNode(int val) { this.val = val; } + TreeNode(int val, TreeNode left, TreeNode right) { + this.val = val; + this.left = left; + this.right = right; + } + } +class SolutionKthSmallest { + public int kthSmallest(TreeNode root, int k) { + // 이진 검색 트리의 루트와 정수 k가 주어지면 트리에 있는 모든 노드 값 중 k번째로 작은 값(1-인덱스)을 반환합니다. + // 이진 검색 트리의 특성을 이용해 중위 순회를 하면 노드 값이 오름차순으로 정렬된다. + // 정렬 후 k번째 값을 반환한다. + // 시간복잡도: O(N), 공간복잡도: O(N) + List list = new ArrayList<>(); + inorder(root, list); + return list.get(k - 1); + } + + private void inorder(TreeNode root, List list) { + if (root == null) { + return; + } + inorder(root.left, list); + list.add(root.val); + inorder(root.right, list); + } +} \ No newline at end of file From a230922e2ca6da01c5e5291fb5dd395f831965bb Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Fri, 16 Aug 2024 23:49:26 +0900 Subject: [PATCH 5/7] Panlindromic substrings solution --- palindromic-substrings/jaejeong1.java | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 palindromic-substrings/jaejeong1.java diff --git a/palindromic-substrings/jaejeong1.java b/palindromic-substrings/jaejeong1.java new file mode 100644 index 000000000..938742aae --- /dev/null +++ b/palindromic-substrings/jaejeong1.java @@ -0,0 +1,52 @@ +class SolutionPalindromicSubstrings { + // 1번쨰 풀이: 구현해야할 로직을 팰린드롬 여부 검사와 검사할 대상 문자열을 구하는 로직 둘로 나눈다 + // 팰린드롬 여부 검사: 투포인터 사용, lt=0, rt=length-1 로 시작해 동등성 여부를 검사 + // 시간복잡도: O(N), 공간복잡도: O(1) + // 대상 문자열 구하기: 투포인터 사용. rt가 length보다 같거나 작을떄까지 계속 증가시키고, + // rt가 끝에 도달하면 lt를 증가시키고, rt를 lt+1로 만든다. 모든 과정에서 팰린드롬 여부를 검사한다 + // 시간복잡도: O(N), 공간복잡도: O(1) + // 결과 + // 시간복잡도: O(N), 공간복잡도: O(1) + + public int countSubstrings(String s) { + var subStrings = s.toCharArray(); + + if (subStrings.length == 0) return 0; + if (subStrings.length == 1) return 1; + + var answer = 0; + + var lt = 0; + var rt = 1; + while(lt < subStrings.length){ + if (isPalindrome(s.substring(lt, rt))) { + answer++; + } + + if (rt <= subStrings.length-1){ + rt++; + } else { + lt++; + rt = lt+1; + } + } + + return answer; + } + + private boolean isPalindrome(String s) { + var chars = s.toCharArray(); + var lt = 0; + var rt = chars.length - 1; + + while(lt < rt) { + if (chars[lt] != chars[rt]) { + return false; + } + lt++; + rt--; + } + + return true; + } +} \ No newline at end of file From 3baa1d58c5bd5d07639a400d313be8938c193259 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Fri, 16 Aug 2024 23:52:47 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contains-duplicate/jaejeong1.java | 2 +- kth-smallest-element-in-a-bst/jaejeong1.java | 2 +- number-of-1-bits/jaejeong1.java | 2 +- palindromic-substrings/jaejeong1.java | 2 +- top-k-frequent-elements/jaejeong1.java | 9 +++------ 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/contains-duplicate/jaejeong1.java b/contains-duplicate/jaejeong1.java index aa7fd79f9..0b129ad1e 100644 --- a/contains-duplicate/jaejeong1.java +++ b/contains-duplicate/jaejeong1.java @@ -13,4 +13,4 @@ public boolean containsDuplicate(int[] nums) { Set set = Arrays.stream(nums).collect(HashSet::new, Set::add, Set::addAll); return set.size() != nums.length; } -} \ No newline at end of file +} diff --git a/kth-smallest-element-in-a-bst/jaejeong1.java b/kth-smallest-element-in-a-bst/jaejeong1.java index e67c985a4..93217c1c2 100644 --- a/kth-smallest-element-in-a-bst/jaejeong1.java +++ b/kth-smallest-element-in-a-bst/jaejeong1.java @@ -33,4 +33,4 @@ private void inorder(TreeNode root, List list) { list.add(root.val); inorder(root.right, list); } -} \ No newline at end of file +} diff --git a/number-of-1-bits/jaejeong1.java b/number-of-1-bits/jaejeong1.java index 83ddc7fc9..d85a7e63e 100644 --- a/number-of-1-bits/jaejeong1.java +++ b/number-of-1-bits/jaejeong1.java @@ -11,4 +11,4 @@ public int hammingWeight(int n) { } return num; } -} \ No newline at end of file +} diff --git a/palindromic-substrings/jaejeong1.java b/palindromic-substrings/jaejeong1.java index 938742aae..fd523dc74 100644 --- a/palindromic-substrings/jaejeong1.java +++ b/palindromic-substrings/jaejeong1.java @@ -49,4 +49,4 @@ private boolean isPalindrome(String s) { return true; } -} \ No newline at end of file +} diff --git a/top-k-frequent-elements/jaejeong1.java b/top-k-frequent-elements/jaejeong1.java index 768c7e9f7..2d8abe76a 100644 --- a/top-k-frequent-elements/jaejeong1.java +++ b/top-k-frequent-elements/jaejeong1.java @@ -1,4 +1,3 @@ -import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -16,12 +15,10 @@ public int[] topKFrequent(int[] nums, int k) { } // 빈도순 정렬 - int[] sortedNums = freq.keySet().stream() + return freq.keySet().stream() .sorted((a, b) -> freq.get(b) - freq.get(a)) .mapToInt(i -> i) + .limit(k) // 배열에서 상위 k개만 반환 .toArray(); - - // 배열에서 상위 k개만 반환 - return Arrays.copyOf(sortedNums, k); } -} \ No newline at end of file +} From bb2f2d38b8aacb440912643dc8466413037fb892 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Fri, 16 Aug 2024 23:56:52 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- palindromic-substrings/jaejeong1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/palindromic-substrings/jaejeong1.java b/palindromic-substrings/jaejeong1.java index fd523dc74..e5baf2d35 100644 --- a/palindromic-substrings/jaejeong1.java +++ b/palindromic-substrings/jaejeong1.java @@ -6,7 +6,7 @@ class SolutionPalindromicSubstrings { // rt가 끝에 도달하면 lt를 증가시키고, rt를 lt+1로 만든다. 모든 과정에서 팰린드롬 여부를 검사한다 // 시간복잡도: O(N), 공간복잡도: O(1) // 결과 - // 시간복잡도: O(N), 공간복잡도: O(1) + // 시간복잡도: O(N^2), 공간복잡도: O(1) public int countSubstrings(String s) { var subStrings = s.toCharArray();