From adbc8131009b432666234d70ff2a4bd139ded812 Mon Sep 17 00:00:00 2001 From: Gotprgmer Date: Wed, 18 Dec 2024 18:15:51 +0900 Subject: [PATCH 1/6] add solution: Longest Consecutive Sequence --- longest-consecutive-sequence/Gotprgmer.java | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 longest-consecutive-sequence/Gotprgmer.java diff --git a/longest-consecutive-sequence/Gotprgmer.java b/longest-consecutive-sequence/Gotprgmer.java new file mode 100644 index 000000000..77ad52e9e --- /dev/null +++ b/longest-consecutive-sequence/Gotprgmer.java @@ -0,0 +1,29 @@ +import java.util.*; +class SolutionGotprgmer { + public int longestConsecutive(int[] nums) { + Set set = new HashSet<>(); + for(int num:nums){ + set.add(num); + } + System.out.println(set); + int answer = 0; + for(int num:nums){ + //왼쪽으로 확장 + int left = 0; + while(set.contains(num-(left+1))){ + left += 1; + } + + //오른쪽으로 확장 + int right = 0; + while(set.contains(num+right+1)){ + right += 1; + } + System.out.println(String.valueOf(left)+" " + String.valueOf(right)); + answer = Math.max(answer,left+right+1); + } + + return answer; + + } +} From 9d752fa55be4cdad964ebde5f5b17835b63349b1 Mon Sep 17 00:00:00 2001 From: Gotprgmer Date: Thu, 19 Dec 2024 00:22:55 +0900 Subject: [PATCH 2/6] add solution: House Robber --- house-robber/Gotprgmer.java | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 house-robber/Gotprgmer.java diff --git a/house-robber/Gotprgmer.java b/house-robber/Gotprgmer.java new file mode 100644 index 000000000..908284e40 --- /dev/null +++ b/house-robber/Gotprgmer.java @@ -0,0 +1,38 @@ +// 해당 문제는 dfs로 풀이 하던 도중, 시간제한으로 풀지 못하였습니다. +// 이후 답을 참고하였고, 메모이제이션을 떠올리게 되었습니다. +// 풀이 아이디어는 i번째 인덱스를 선택한 합과 i+1번째 인덱스를 선택한 합중에 큰 것을 선택하는 것이 가장 큰 아이디어 였습니다. +// 그런데 중복된 과정이 존재하기에 메모이제이션을 활용하여 +// 원래는 O(2^N)의 시간복잡도를 +// 각 인덱스에 해당하는 함수호출을 1번씩만 하도록 유도하여 시간복잡도를 해결하였습니다. +// 시간복잡도 : O(N) +// 공간복잡도 : O(N) + +class SolutionGotprgmer { + static int[] memo; + static int answer; + public int rob(int[] nums) { + answer = 0; + memo = new int[nums.length]; + for(int i=0;i Date: Thu, 19 Dec 2024 00:23:20 +0900 Subject: [PATCH 3/6] fix solution: House Robber --- house-robber/Gotprgmer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/house-robber/Gotprgmer.java b/house-robber/Gotprgmer.java index 908284e40..4d71d32d3 100644 --- a/house-robber/Gotprgmer.java +++ b/house-robber/Gotprgmer.java @@ -35,4 +35,4 @@ public int dfs(int[] nums, int idx){ } -} \ No newline at end of file +} From 1aaf1899396c9ff4435b951aa7f4e5e2baf98aea Mon Sep 17 00:00:00 2001 From: Gotprgmer Date: Thu, 19 Dec 2024 15:55:59 +0900 Subject: [PATCH 4/6] add solution: Valid Anagram --- valid-anagram/Gotprgmer.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 valid-anagram/Gotprgmer.java diff --git a/valid-anagram/Gotprgmer.java b/valid-anagram/Gotprgmer.java new file mode 100644 index 000000000..773edc54f --- /dev/null +++ b/valid-anagram/Gotprgmer.java @@ -0,0 +1,30 @@ +// 각 s와 t의 알파벳 수를 카운팅 시켜서 마지막에 카운팅이 모두 같으면 true +// 그렇지 않으면 false; + +// 시간복잡도 O(N) => 1중 for문 +// 공간복잡도 O(N) => N개 알파벳이 들어있는 Map 2개 +class SolutionGotprgmer { + public boolean isAnagram(String s, String t) { + Map sMap = new HashMap<>(); + Map tMap = new HashMap<>(); + if(s.length() != t.length()){ + return false; + } + for(int i=0;i Date: Thu, 19 Dec 2024 16:20:23 +0900 Subject: [PATCH 5/6] add solution: Climbing Stairs --- climbing-stairs/Gotprgmer.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 climbing-stairs/Gotprgmer.java diff --git a/climbing-stairs/Gotprgmer.java b/climbing-stairs/Gotprgmer.java new file mode 100644 index 000000000..c507103d2 --- /dev/null +++ b/climbing-stairs/Gotprgmer.java @@ -0,0 +1,16 @@ +// dp문제 +// i번째 계단을 가려면 i-1번째 계단까지의 경우의 수와 i-2번째 계단까지의 경우의 수를 합친 것 +// 시간복잡도 : O(N) +// 공간복잡도 : O(N) +class Solution { + public int climbStairs(int n) { + int[] dp = new int[n+1]; + dp[0] = 1; + dp[1] = 1; + for(int i=2;i Date: Fri, 20 Dec 2024 20:05:46 +0900 Subject: [PATCH 6/6] add solution: 3Sum --- 3sum/Gotprgmer.java | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 3sum/Gotprgmer.java diff --git a/3sum/Gotprgmer.java b/3sum/Gotprgmer.java new file mode 100644 index 000000000..46ba25c57 --- /dev/null +++ b/3sum/Gotprgmer.java @@ -0,0 +1,37 @@ +// 이전에 투포인터를 활용하여 시도했지만 중복된 값들을 처리하는데 어려움이 있었습니다. +// 그래서 해답을 보았고 새로운 방법으로 풀어보았습니다. +// 서로 다른 i와 j 인덱스를 2중 for문으로 진행하면서 +// i와 j사이 수들을 set으로 관리합니다. +// set에 -nums[i]-nums[j]가 존재하면 결과 리스트에 추가합니다. +// 시간복잡도 : O(N^2) +// 공간복잡도 : O(N) +class SolutionGotprgmer { + public List> threeSum(int[] nums) { + // 결과를 저장할 리스트 + List> result = new ArrayList<>(); + Set set; + Set> resultSet = new HashSet<>(); + List numList; + + + // 리스트 정렬 + Arrays.sort(nums); + for(int i=0;i 0 && nums[i - 1] == nums[i]) continue; + + set = new HashSet<>(); + for(int j=i+1;j(Arrays.asList(nums[i], -checkNum, nums[j])); + if(!resultSet.contains(numList)){ + result.add(numList); + resultSet.add(numList); + } + } + set.add(nums[j]); + } + } + return result; + } +}