From a1325ded668ed9a0dce23d2ebdf0498b8c0a3dde Mon Sep 17 00:00:00 2001 From: ohchansol Date: Wed, 17 Dec 2025 20:56:05 +0900 Subject: [PATCH 1/4] feat: coin-change solve --- coin-change/haxr369.java | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 coin-change/haxr369.java diff --git a/coin-change/haxr369.java b/coin-change/haxr369.java new file mode 100644 index 0000000000..57e3fafb47 --- /dev/null +++ b/coin-change/haxr369.java @@ -0,0 +1,36 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +class Solution { + + /** + * 중복순열을 구하는 부분은 2번 풀이와 동일하지만, + * 후보배열을 정렬하고, 후보 선택 시 이전 값과 같거나 큰 후보만을 선택하기에 + * 동일 요소가 존재하는 배열을 중복해서 만들지 않음. + * 또한 Set 같은 저장위치를 제거해서 메모리 최적화. + * + * Runtime: 5 ms (Beats 8.49%) + * Memory: 45.77 MB (Beats 16.78%) + * Space Complexity: O(N) + * - 사용된 후보를 저장하는 배열 O(N) + * > O(N) + * Time Complexity: O(2^N/N!) + * - 후보 하나를 선택해서 target과 비교 => O(2^N) + * - target이 0이 되거나 누적 값이 더 커질 때까지 스택을 쌓기 + * - 최대 누적할 수 있는 횟수는 40 / 2 = 20회 => O(20) = O(M) + * - 다만, 중복배열 생성을 방지하는 트릭을 추가함 O(1/N!) + * > O(2^N/N!) + * + * @param candidates + * @param target + * @return + */ + public List> combinationSum(int[] candidates, int target) { + + return ans; + } + +} \ No newline at end of file From 63395be8c90a328c9b5753a78b25a4243544d17d Mon Sep 17 00:00:00 2001 From: ohchansol Date: Wed, 17 Dec 2025 21:40:00 +0900 Subject: [PATCH 2/4] feat: valid-parentheses --- valid-parentheses/haxr369.java | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 valid-parentheses/haxr369.java diff --git a/valid-parentheses/haxr369.java b/valid-parentheses/haxr369.java new file mode 100644 index 0000000000..08df57110a --- /dev/null +++ b/valid-parentheses/haxr369.java @@ -0,0 +1,50 @@ +import java.util.Stack; + +class Solution { + /** + * 1. 열기는 같은 타입의 닫기가 필요함. + * 2. 열기는 정확한 순서로 닫기가 필요함. + * 3. 모든 닫기 괄호는 열기 괄호에 대응됨..! + * + * 스택을 이용하기 + * 1. 열기괄호를 스택에 넣기 + * 2. 닫기괄호를 보면 스택의 상단을 보기 + * > 상단과 닫기 괄호가 다르면? false + * > 같으면 상단을 pop + * 3. 맨 마지막에 스택은 비어있어야함. + */ + public boolean isValid(String s) { + char[] brkts = { '(', ')', '{', '}', '[', ']' }; + + Stack st = new Stack<>(); + // System.out.println("j->"); + for (int i = 0; i < s.length(); i++) { + for (int j = 0; j < 6; j++) { + // System.out.println("ㅑ->"+s.charAt(i)+" j->"+brkts[j]); + if (s.charAt(i) == brkts[j]) { + // 열기면 스택에 넣기 + if (j % 2 == 0) { + st.push(j); + // System.out.println("j->"+j); + } else { // 닫기면 top이랑 비교하기 + // 스택이 비어있으면 false; + if (st.size() == 0) { + return false; + } + int top = st.pop(); + // System.out.println("j->"+j+" top->"+top+" remn_size->"+st.size()); + if (top + 1 != j) { + // 상단값이 닫기 괄호랑 맞지 않으면 false + return false; + } + } + } + } + } + // 스택에 괄호가 남아있으면 false + if (st.size() > 0) { + return false; + } + return true; + } +} \ No newline at end of file From d4f8cd4ce2148975bbf90fb45775898569c6771d Mon Sep 17 00:00:00 2001 From: ohchansol Date: Wed, 17 Dec 2025 21:41:49 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=EA=B0=9C=ED=96=89=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-parentheses/haxr369.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valid-parentheses/haxr369.java b/valid-parentheses/haxr369.java index 08df57110a..1325bc6a0a 100644 --- a/valid-parentheses/haxr369.java +++ b/valid-parentheses/haxr369.java @@ -47,4 +47,4 @@ public boolean isValid(String s) { } return true; } -} \ No newline at end of file +} From 8833849967a86962ea156d0d9a6c7aa4f5ea9ae7 Mon Sep 17 00:00:00 2001 From: ohchansol Date: Wed, 17 Dec 2025 21:43:06 +0900 Subject: [PATCH 4/4] =?UTF-8?q?remove:=20=EC=95=88=20=ED=91=BC=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coin-change/haxr369.java | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 coin-change/haxr369.java diff --git a/coin-change/haxr369.java b/coin-change/haxr369.java deleted file mode 100644 index 57e3fafb47..0000000000 --- a/coin-change/haxr369.java +++ /dev/null @@ -1,36 +0,0 @@ -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -class Solution { - - /** - * 중복순열을 구하는 부분은 2번 풀이와 동일하지만, - * 후보배열을 정렬하고, 후보 선택 시 이전 값과 같거나 큰 후보만을 선택하기에 - * 동일 요소가 존재하는 배열을 중복해서 만들지 않음. - * 또한 Set 같은 저장위치를 제거해서 메모리 최적화. - * - * Runtime: 5 ms (Beats 8.49%) - * Memory: 45.77 MB (Beats 16.78%) - * Space Complexity: O(N) - * - 사용된 후보를 저장하는 배열 O(N) - * > O(N) - * Time Complexity: O(2^N/N!) - * - 후보 하나를 선택해서 target과 비교 => O(2^N) - * - target이 0이 되거나 누적 값이 더 커질 때까지 스택을 쌓기 - * - 최대 누적할 수 있는 횟수는 40 / 2 = 20회 => O(20) = O(M) - * - 다만, 중복배열 생성을 방지하는 트릭을 추가함 O(1/N!) - * > O(2^N/N!) - * - * @param candidates - * @param target - * @return - */ - public List> combinationSum(int[] candidates, int target) { - - return ans; - } - -} \ No newline at end of file