diff --git a/contains-duplicate/Tessa1217.java b/contains-duplicate/Tessa1217.java new file mode 100644 index 000000000..fd23ca27b --- /dev/null +++ b/contains-duplicate/Tessa1217.java @@ -0,0 +1,21 @@ +import java.util.HashSet; +import java.util.Set; + +class Solution { + + /** 217. 중복된 수 + * 정수 배열 nums가 주어졌을 때 배열 요소 중 한 개 이상이 두 번 이상 중복되어 + * 나타는 경우 true를, 모든 배열의 요소가 고유한 경우 false를 반환 + */ + public boolean containsDuplicate(int[] nums) { + + Set distincts = new HashSet<>(); + + for (int i = 0; i < nums.length; i++) { + distincts.add(nums[i]); + } + + return distincts.size() != nums.length; + } +} + diff --git a/house-robber/Tessa1217.java b/house-robber/Tessa1217.java new file mode 100644 index 000000000..18aa0afb8 --- /dev/null +++ b/house-robber/Tessa1217.java @@ -0,0 +1,25 @@ +class Solution { + + // 전문적인 강도인 당신은 거리에 있는 집들을 털 계획을 세우고 있다. + // 조건: 인접한 집들은 연결된 보안 경비 시스팀이 있어 인접한 집을 같은 날에 털 경우 자동적으로 경찰에 연락이 간다. + // 각 집에 쌓아둔 돈의 양 배열 (정수 배열)이 주어질 때 경찰한테 걸리지 않고 털 수 있는 최대 돈의 양을 반환하시오. + public int rob(int[] nums) { + + // 조건: 1 == nums.length (털 집이 한 곳 뿐) + if (nums.length == 1) { + return nums[0]; + } + + // DP로 계산 + nums[1] = Math.max(nums[0], nums[1]); + + for (int i = 2; i < nums.length; i++) { + nums[i] = Math.max(nums[i - 1], nums[i - 2] + nums[i]); + } + + return nums[nums.length - 1]; + + } + +} + diff --git a/longest-consecutive-sequence/Tessa1217.java b/longest-consecutive-sequence/Tessa1217.java new file mode 100644 index 000000000..60a998a17 --- /dev/null +++ b/longest-consecutive-sequence/Tessa1217.java @@ -0,0 +1,32 @@ + +/** + * 정렬되지 않은 정수 배열 nums가 주어질 때 가장 긴 연속적인 요소 배열의 길이를 반환 + * */ +import java.util.Arrays; +public class Solution { + + public int longestConsecutive(int[] nums) { + + if (nums.length == 0) { + return 0; + } + + Arrays.sort(nums); + + int maxCnt = 1; + int cnt = 1; + for (int i = 0; i < nums.length - 1; i++) { + if (nums[i] == nums[i + 1]) { + continue; + } + if (nums[i] + 1 == nums[i + 1]) { + cnt++; + } else { + cnt = 1; + } + maxCnt = Math.max(maxCnt, cnt); + } + return maxCnt; + } + +} diff --git a/top-k-frequent-elements/Tessa1217.java b/top-k-frequent-elements/Tessa1217.java new file mode 100644 index 000000000..74fa3be7f --- /dev/null +++ b/top-k-frequent-elements/Tessa1217.java @@ -0,0 +1,34 @@ + +/** + * 정수 배열 nums와 정수 k가 주어질 때 자주 반복되는 값을 K개 반환 + * */ +import java.util.Map; +import java.util.HashMap; +import java.util.Arrays; + +public class Solution { + + public int[] topKFrequent(int[] nums, int k) { + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.put(nums[i], map.getOrDefault(nums[i], 0) + 1); + } + + int[][] arr = map.entrySet().stream() + .map((e) -> new int[]{e.getKey(), e.getValue()}) + .toArray(int[][]::new); + + Arrays.sort(arr, (f1, f2) -> f2[1] - f1[1]); + + int[] frequency = new int[k]; + for (int i = 0; i < k; i++) { + frequency[i] = arr[i][0]; + } + + return frequency; + + } + +} + + diff --git a/two-sum/Tessa1217.java b/two-sum/Tessa1217.java new file mode 100644 index 000000000..b94a74378 --- /dev/null +++ b/two-sum/Tessa1217.java @@ -0,0 +1,50 @@ +import java.util.Map; +import java.util.HashMap; + +class Solution { + // 정수 배열 nums와 정수 target가 주어질 때 두 정수의 합이 target이 되는 배열 요소의 인덱스를 반환 + // 입력받은 배열에는 하나의 해답만 존재한다고 가정할 수 있으며 같은 요소를 한 번 이상 사용할 수는 없다. + // 반환하는 인덱스의 정렬은 신경쓰지 않아도 된다. + + public int[] twoSum(int[] nums, int target) { + + // 힌트를 참고하여 시간 복잡도 O(n^2) 이하로 줄이기 + // 힌트: Like maybe a hash map to speed up the search? + + int[] answer = new int[2]; + + Map numMap = new HashMap<>(); + + for (int i = 0; i < nums.length; i++) { + if (numMap.containsKey(target - nums[i])) { + answer[0] = numMap.get(target - nums[i]); + answer[1] = i; + break; + } + numMap.put(nums[i], i); + } + + return answer; + + } + + // public int[] twoSum(int[] nums, int target) { + + // // 전체 탐색 진행 + // int[] answer = new int[2]; + + // for (int i = 0; i < nums.length - 1; i++) { + // for (int j = i + 1; j < nums.length; j++) { + // if (nums[i] + nums[j] == target) { + // answer[0] = i; + // answer[1] = j; + // } + // } + // } + + // return answer; + // } + +} + +