diff --git a/3sum/paragon0107.java b/3sum/paragon0107.java new file mode 100644 index 000000000..fde5a8a25 --- /dev/null +++ b/3sum/paragon0107.java @@ -0,0 +1,28 @@ +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +class Solution { + public List> threeSum(int[] nums) { + Set> set = new HashSet<>(); + Arrays.sort(nums); + for (int i = 0; i < nums.length-2; i++) { + int start = i + 1; + int end = nums.length - 1; + while (start < end) { + int sum = nums[i] + nums[start] + nums[end]; + if (sum < 0 ) { + start++; + } else if (sum > 0) { + end--; + }else { + set.add(Arrays.asList(nums[i], nums[start], nums[end])); + start++; + end--; + } + } + } + return set.stream().toList(); + } +} diff --git a/climbing-stairs/paragon0107_230.java b/climbing-stairs/paragon0107_230.java new file mode 100644 index 000000000..0fbd59dd4 --- /dev/null +++ b/climbing-stairs/paragon0107_230.java @@ -0,0 +1,19 @@ +/* +* +* 시간 복잡도: +* 바텀업 형식으로 배열을 훑으며 올라가기 때문에 O(N) +* 공간 복잡도: +* 자연수 마다 해당하는 방법의 갯수를 저장하기 때문에 O(N) +* +* */ +class Solution { + public int climbStairs(int n) { + int[] dp = new int[n + 1]; + dp[1] = 1; + dp[2] = 2; + for(int i=3;i<=n;i++){ + dp[i] = dp[i - 2] + dp[i - 1]; + } + return dp[n]; + } +} diff --git a/valid-anagram/paragon0107_218.java b/valid-anagram/paragon0107_218.java new file mode 100644 index 000000000..47916654c --- /dev/null +++ b/valid-anagram/paragon0107_218.java @@ -0,0 +1,18 @@ +import java.util.Arrays; +/* +* 시간 복잡도: +* toCharArray는 O(1)의 복잡도를 갖고 ArraySor의 경우 평균O(nlogn), 최악O(n^2)를 갖음(코테시 몇으로 계산하고 진행해야 할 지는 잘 모르겠네요..) +* 공간 복잡도: +* s와t를 사용해서 그대로 배열로 만들기 때문에 O(n) +* +* +* */ +class Solution { + public static boolean isAnagram(String s, String t) { + char[] s1 = s.toCharArray(); + char[] s2 = t.toCharArray(); + Arrays.sort(s1); + Arrays.sort(s2); + return Arrays.equals(s1, s2); + } +}