From d21d14e4c78f11999bed2e5fc5607699b7d700b0 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Sun, 18 Aug 2024 17:49:13 +0900 Subject: [PATCH 1/8] valid anagram solution --- valid-anagram/jaejeong1.java | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 valid-anagram/jaejeong1.java diff --git a/valid-anagram/jaejeong1.java b/valid-anagram/jaejeong1.java new file mode 100644 index 000000000..bf2ce1a2e --- /dev/null +++ b/valid-anagram/jaejeong1.java @@ -0,0 +1,42 @@ +import java.util.HashMap; +import java.util.Map; + +class SolutionValidAnagram { + public boolean isAnagram(String s, String t) { + // 풀이: 해시맵을 사용해 s와 t의 문자 별 빈도수를 저장한다 + // 두 빈도수의 모든 키와 값이 같고, 크기가 같은지 비교한다. + // 다르다면 false를 반환, 모두 같다면 true를 반환한다. + // 시간복잡도: O(N), 공간복잡도: O(N) + + Map sAnagram = createAnagramMap(s); + Map tAnagram = createAnagramMap(t); + + // 두 해시맵의 크기가 같은지 확인 + if (sAnagram.size() != tAnagram.size()) { + return false; + } + + // sAnagram과 tAnagram의 모든 키와 값을 비교 + for (Map.Entry entry : sAnagram.entrySet()) { + var key = entry.getKey(); + int value = entry.getValue(); + + // tAnagram에 key가 존재하지 않거나, 그에 대응하는 value가 다르면 false 반환 + if (!tAnagram.containsKey(key) || !tAnagram.get(key).equals(value)) { + return false; + } + } + + return true; + } + + private Map createAnagramMap(String text) { + Map anaGramMap = new HashMap<>(); + + for (var c: text.toCharArray()) { + anaGramMap.put(c, anaGramMap.getOrDefault(c, 0) + 1); + } + + return anaGramMap; + } +} \ No newline at end of file From b82a897ee345a25e2e4da3ee4daf3fa2640cc355 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Sun, 18 Aug 2024 18:42:17 +0900 Subject: [PATCH 2/8] counting bits solution --- counting-bits/jaejeong1.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 counting-bits/jaejeong1.java diff --git a/counting-bits/jaejeong1.java b/counting-bits/jaejeong1.java new file mode 100644 index 000000000..8ac07bfe5 --- /dev/null +++ b/counting-bits/jaejeong1.java @@ -0,0 +1,26 @@ +class SolutionCountingBits { + public int[] countBits(int n) { + // 0 ~ n 까지의 수를 이진수로 변환한다음, 1의 개수를 카운트해 배열로 반환 + // 홀수/짝수 여부를 나눠서 1의 개수를 구함 + // 홀수: 이전 값 + 1, 짝수: i / 2의 1의 개수와 같은 값 + // 시간복잡도: O(N), 공간복잡도: O(N) + + int[] countingBits = new int[n + 1]; + countingBits[0] = 0; + + for (int i=1; i<=n; i++) { + if (isOddNumber(i)) { + countingBits[i] = countingBits[i - 1] + 1; + } else { + countingBits[i] = countingBits[i / 2]; + } + } + + return countingBits; + } + + // 시간복잡도: O(1) + private boolean isOddNumber(int n) { + return n % 2 == 1; + } +} \ No newline at end of file From 0fe2d97fe1dc205fdfacfeef70efb45f573e369f Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Sun, 18 Aug 2024 18:44:48 +0900 Subject: [PATCH 3/8] line break --- counting-bits/jaejeong1.java | 2 +- valid-anagram/jaejeong1.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/counting-bits/jaejeong1.java b/counting-bits/jaejeong1.java index 8ac07bfe5..620605403 100644 --- a/counting-bits/jaejeong1.java +++ b/counting-bits/jaejeong1.java @@ -23,4 +23,4 @@ public int[] countBits(int n) { private boolean isOddNumber(int n) { return n % 2 == 1; } -} \ No newline at end of file +} diff --git a/valid-anagram/jaejeong1.java b/valid-anagram/jaejeong1.java index bf2ce1a2e..9f90a1f67 100644 --- a/valid-anagram/jaejeong1.java +++ b/valid-anagram/jaejeong1.java @@ -39,4 +39,4 @@ private Map createAnagramMap(String text) { return anaGramMap; } -} \ No newline at end of file +} From 933b3547d7b7f47d2ef20cd04b35734c7dc5237c Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Sun, 18 Aug 2024 23:08:13 +0900 Subject: [PATCH 4/8] encode and decode strings solution --- encode-and-decode-strings/jaejeong1.java | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 encode-and-decode-strings/jaejeong1.java diff --git a/encode-and-decode-strings/jaejeong1.java b/encode-and-decode-strings/jaejeong1.java new file mode 100644 index 000000000..878740b09 --- /dev/null +++ b/encode-and-decode-strings/jaejeong1.java @@ -0,0 +1,48 @@ +import java.util.ArrayList; +import java.util.List; + +class SolutionEncodeAndDecodeStrings { + private static final char SEPERATOR = '/'; + /* + * @param strs: a list of strings + * @return: encodes a list of strings to a single string. + */ + // 풀이: 문자열 길이를 구분자와 함께 encode해 decode시 문자열 길이를 참고할 수 있도록 한다 + // 시간복잡도: O(N), 공간복잡도: O(1) + public String encode(List strs) { + // write your code here + var answer = new StringBuilder(); + + for (var str : strs) { + answer.append(str.length()) + .append(str) + .append(SEPERATOR); + } + + return answer.toString(); + } + + /* + * @param str: A string + * @return: decodes a single string to a list of strings + */ + // 풀이: 문자열 길이를 구분자와 함께 encode해 decode시 문자열 길이를 참고할 수 있도록 한다 + // 시간복잡도: O(N), 공간복잡도: O(N) + public List decode(String str) { + // write your code here + List answer = new ArrayList<>(); + var charArray = str.toCharArray(); + for (int i=0; i Date: Sun, 18 Aug 2024 23:08:44 +0900 Subject: [PATCH 5/8] encode and decode strings solution --- encode-and-decode-strings/jaejeong1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/encode-and-decode-strings/jaejeong1.java b/encode-and-decode-strings/jaejeong1.java index 878740b09..bdc956527 100644 --- a/encode-and-decode-strings/jaejeong1.java +++ b/encode-and-decode-strings/jaejeong1.java @@ -45,4 +45,4 @@ public List decode(String str) { return answer; } -} \ No newline at end of file +} From acf5f5acb3a0ba1395b229f2ae4c856500fc0b24 Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Sun, 18 Aug 2024 23:08:13 +0900 Subject: [PATCH 6/8] encode and decode strings solution --- encode-and-decode-strings/jaejeong1.java | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 encode-and-decode-strings/jaejeong1.java diff --git a/encode-and-decode-strings/jaejeong1.java b/encode-and-decode-strings/jaejeong1.java new file mode 100644 index 000000000..bdc956527 --- /dev/null +++ b/encode-and-decode-strings/jaejeong1.java @@ -0,0 +1,48 @@ +import java.util.ArrayList; +import java.util.List; + +class SolutionEncodeAndDecodeStrings { + private static final char SEPERATOR = '/'; + /* + * @param strs: a list of strings + * @return: encodes a list of strings to a single string. + */ + // 풀이: 문자열 길이를 구분자와 함께 encode해 decode시 문자열 길이를 참고할 수 있도록 한다 + // 시간복잡도: O(N), 공간복잡도: O(1) + public String encode(List strs) { + // write your code here + var answer = new StringBuilder(); + + for (var str : strs) { + answer.append(str.length()) + .append(str) + .append(SEPERATOR); + } + + return answer.toString(); + } + + /* + * @param str: A string + * @return: decodes a single string to a list of strings + */ + // 풀이: 문자열 길이를 구분자와 함께 encode해 decode시 문자열 길이를 참고할 수 있도록 한다 + // 시간복잡도: O(N), 공간복잡도: O(N) + public List decode(String str) { + // write your code here + List answer = new ArrayList<>(); + var charArray = str.toCharArray(); + for (int i=0; i Date: Thu, 22 Aug 2024 22:21:24 +0900 Subject: [PATCH 7/8] =?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 --- valid-anagram/jaejeong1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valid-anagram/jaejeong1.java b/valid-anagram/jaejeong1.java index 9f90a1f67..d9db99fb2 100644 --- a/valid-anagram/jaejeong1.java +++ b/valid-anagram/jaejeong1.java @@ -6,7 +6,7 @@ public boolean isAnagram(String s, String t) { // 풀이: 해시맵을 사용해 s와 t의 문자 별 빈도수를 저장한다 // 두 빈도수의 모든 키와 값이 같고, 크기가 같은지 비교한다. // 다르다면 false를 반환, 모두 같다면 true를 반환한다. - // 시간복잡도: O(N), 공간복잡도: O(N) + // 시간복잡도: O(N), 공간복잡도: O(1) Map sAnagram = createAnagramMap(s); Map tAnagram = createAnagramMap(t); From 93deafffd516a1e465da9853318a5236b4518f1c Mon Sep 17 00:00:00 2001 From: wad-jangjaejeong Date: Thu, 22 Aug 2024 22:56:14 +0900 Subject: [PATCH 8/8] =?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 --- encode-and-decode-strings/jaejeong1.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/encode-and-decode-strings/jaejeong1.java b/encode-and-decode-strings/jaejeong1.java index bdc956527..7bd7a8232 100644 --- a/encode-and-decode-strings/jaejeong1.java +++ b/encode-and-decode-strings/jaejeong1.java @@ -2,6 +2,7 @@ import java.util.List; class SolutionEncodeAndDecodeStrings { + private static final char SEPERATOR = '/'; /* * @param strs: a list of strings @@ -14,9 +15,9 @@ public String encode(List strs) { var answer = new StringBuilder(); for (var str : strs) { - answer.append(str.length()) - .append(str) - .append(SEPERATOR); + answer.append(SEPERATOR) + .append(str.length()) + .append(str); } return answer.toString(); @@ -31,16 +32,12 @@ public String encode(List strs) { public List decode(String str) { // write your code here List answer = new ArrayList<>(); - var charArray = str.toCharArray(); - for (int i=0; i