From 4a5930d4ae83c3d7ef7b01e3af8a1486506567f7 Mon Sep 17 00:00:00 2001 From: jsson Date: Mon, 29 Jun 2026 16:23:05 +0900 Subject: [PATCH 1/4] [WEEK 02] Valid Anagram --- valid-anagram/essaysir.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 valid-anagram/essaysir.java diff --git a/valid-anagram/essaysir.java b/valid-anagram/essaysir.java new file mode 100644 index 0000000000..07539194ad --- /dev/null +++ b/valid-anagram/essaysir.java @@ -0,0 +1,20 @@ +import java.util.*; + +class Solution { + public boolean isAnagram(String s, String t) { + // 둘이 anagram 이면 인지 아닌지 확인 해라 + // 아나 그램이 다시 만들 수 있는 가 == 들어있는 알파벳의 갯수가 동일한 가 + Map prevMap = new HashMap<>(); + Map curMap = new HashMap<>(); + + for ( int i = 0; i < s.length(); i++ ){ + prevMap.merge(s.charAt(i), 1, Integer::sum); + } + + for ( int i = 0; i < t.length(); i ++){ + curMap.merge(t.charAt(i),1 ,Integer::sum); + } + + return prevMap.equals(curMap); + } +} From 204a7acb7e62b6a36cdae11c8548756dc7516a61 Mon Sep 17 00:00:00 2001 From: jsson Date: Mon, 29 Jun 2026 16:35:09 +0900 Subject: [PATCH 2/4] [WEEK 02] Climbing Stairs --- climbing-stairs/essaysir.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 climbing-stairs/essaysir.java diff --git a/climbing-stairs/essaysir.java b/climbing-stairs/essaysir.java new file mode 100644 index 0000000000..f550971d45 --- /dev/null +++ b/climbing-stairs/essaysir.java @@ -0,0 +1,18 @@ +class Solution { + // TC: O(2의 N승) + // SC: O(N) + public int climbStairs(int n) { + // 1과 2로만 움직일 수 있을 때, 도달할 수 있는 모든 방법의 수에 대해 구하시오 + // DPS (QUEUE) , BPS (STACK) + int result = dfs(n); + return result; + } + + // dfs(5) -> dfs(3) + dfs(4) -> dfs(2) + dfs(1) + dfs(3) + dfs(2) + public static int dfs(int n){ + if ( n == 1) return 1; + if ( n == 2) return 2; + + return dfs(n-1) + dfs(n-2); + } +} From 35a031685d8a26d31442f15a6725a393691fff72 Mon Sep 17 00:00:00 2001 From: jsson Date: Tue, 30 Jun 2026 17:48:06 +0900 Subject: [PATCH 3/4] [WEEK 02] Climbing Stairs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - memo 를 이용한 시간 복잡도 단축 --- climbing-stairs/essaysir.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/climbing-stairs/essaysir.java b/climbing-stairs/essaysir.java index f550971d45..ec04f09bbd 100644 --- a/climbing-stairs/essaysir.java +++ b/climbing-stairs/essaysir.java @@ -1,18 +1,24 @@ +import java.util.*; + class Solution { // TC: O(2의 N승) // SC: O(N) + public static Map memo = new HashMap<>(); + public int climbStairs(int n) { // 1과 2로만 움직일 수 있을 때, 도달할 수 있는 모든 방법의 수에 대해 구하시오 // DPS (QUEUE) , BPS (STACK) - int result = dfs(n); - return result; + return dfs(n); } // dfs(5) -> dfs(3) + dfs(4) -> dfs(2) + dfs(1) + dfs(3) + dfs(2) public static int dfs(int n){ if ( n == 1) return 1; if ( n == 2) return 2; + if ( memo.containsKey(n) ) return memo.get(n); - return dfs(n-1) + dfs(n-2); + int result = dfs(n-1) + dfs(n-2); + memo.put(n, result); + return result; } } From e5d0b6031c2e0995f1e5b0068a74ba6614a71e9f Mon Sep 17 00:00:00 2001 From: jsson Date: Tue, 30 Jun 2026 18:11:29 +0900 Subject: [PATCH 4/4] [WEEK 02] product of array except self --- product-of-array-except-self/essaysir.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 product-of-array-except-self/essaysir.java diff --git a/product-of-array-except-self/essaysir.java b/product-of-array-except-self/essaysir.java new file mode 100644 index 0000000000..cdd4e65b3f --- /dev/null +++ b/product-of-array-except-self/essaysir.java @@ -0,0 +1,26 @@ +class Solution { + public int[] productExceptSelf(int[] nums) { + // 시간 복잡도가 O(N) 이어야 함. + // 배열에서 나 자신을 빼고서 모두를 곱하라 + // 어떻게 해야 시간 복잡도가 O(N) 이지 ? + int n = nums.length; + int zeroCount = 0; + int maxTotal = 1; // 0이 아닌 값들의 곱 + for (int x : nums) { + if (x == 0) zeroCount++; + else maxTotal *= x; + } + + int[] result = new int[n]; + for (int i = 0; i < n; i++) { + if (zeroCount >= 2) { + result[i] = 0; // 0이 2개 이상 → 무조건 0 + } else if (zeroCount == 1) { + result[i] = (nums[i] == 0) ? maxTotal : 0; // 0 위치만 살아남음 + } else { + result[i] = maxTotal / nums[i]; // 0 없음 → 그냥 나눔 + } + } + return result; + } +}