Skip to content

Commit cd4e26b

Browse files
authored
Merge pull request #1153 from eunhwa99/main
[eunhwa99] Week01 Solutions
2 parents 0c50ee3 + 3cf9df1 commit cd4e26b

File tree

5 files changed

+92
-116
lines changed

5 files changed

+92
-116
lines changed
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1+
import java.util.HashSet;
2+
3+
// ๊ณต๊ฐ„ ๋ณต์žก๋„; O(n)
4+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(1)
15
class Solution {
26
public boolean containsDuplicate(int[] nums) {
3-
HashSet<Integer> seen = new HashSet<>();
7+
HashSet<Integer> visited = new HashSet<>();
48
for (int num : nums) {
5-
if (!seen.add(num)) {
9+
if (!visited.add(num)) {
610
return true;
711
}
812
}
9-
1013
return false;
11-
12-
1314
}
1415
}

โ€Žhouse-robber/eunhwa99.javaโ€Ž

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1-
import java.util.Arrays;
2-
1+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n) - dp ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒ
2+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) - dp ๋ฐฐ์—ด
33
class Solution {
4-
int size = 0;
5-
int[] numArray;
6-
int[] dp;
7-
84
public int rob(int[] nums) {
9-
size = nums.length;
10-
dp = new int[size];
11-
// ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ -1๋กœ ๋ณ€๊ฒฝ
12-
Arrays.fill(dp, -1);
13-
numArray = nums;
14-
return fun(0);
15-
}
5+
int[][] dp = new int[nums.length][2]; // 0: not robbed, 1: robbed
6+
7+
if(nums.length == 0) return 0;
8+
if(nums.length == 1) return nums[0];
169

17-
private int fun(int idx) {
18-
if (idx >= size) return 0;
19-
if (dp[idx] != -1) return dp[idx];
20-
dp[idx] = 0; // check
21-
dp[idx] += Math.max(fun(idx + 2) + numArray[idx], fun(idx + 1));
22-
return dp[idx];
10+
dp[0][0] = 0;
11+
dp[0][1] = nums[0];
12+
13+
for(int i = 1; i < nums.length; i++){
14+
dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1]);
15+
dp[i][1] = dp[i-1][0] + nums[i];
16+
}
17+
18+
return Math.max(dp[nums.length-1][0], dp[nums.length-1][1]);
2319
}
2420
}
21+
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import java.util.HashSet;
1+
import java.util.Arrays;
22

3-
class Solution {
4-
public int longestConsecutive(int[] nums) {
5-
HashSet<Integer> mySet = new HashSet<Integer>();
6-
7-
for (int num : nums) {
8-
mySet.add(num);
9-
}
10-
11-
int result = 0;
12-
for (int num : mySet) {
13-
int cnt = 1;
14-
if (!mySet.contains(num - 1)) {
15-
while (mySet.contains(++num)) {
16-
++cnt;
17-
}
18-
result = Math.max(cnt, result);
3+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nlogn) - ์ •๋ ฌ
4+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
5+
class Solution{
6+
public int longestConsecutive(int[] nums){
7+
if(nums.length == 0) return 0;
8+
Arrays.sort(nums);
9+
int pre = nums[0];
10+
int max = 1;
11+
int count = 1;
12+
for(int i = 1; i < nums.length; i++){
13+
if(nums[i] == pre + 1){
14+
count++;
15+
max = Math.max(max, count);
16+
} else if(nums[i] != pre){
17+
count = 1;
1918
}
19+
pre = nums[i];
2020
}
21-
return result;
21+
return max;
2222
}
2323
}
Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,33 @@
11
import java.util.HashMap;
22
import java.util.Map;
3+
import java.util.PriorityQueue;
4+
5+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nlogk) - ์ตœ๋Œ€ ํž™์— k๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋„ฃ๋Š”๋ฐ O(logk)๊ฐ€ ๊ฑธ๋ฆฌ๊ณ , ์ด๋ฅผ n๋ฒˆ ๋ฐ˜๋ณต
6+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) - ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” freqMap
37
class Solution {
4-
public static int[] topKFrequent(int[] nums, int k) {
5-
Map<Integer, Integer> myMap = new HashMap<>();
6-
for (int num : nums) {
7-
myMap.put(num, myMap.getOrDefault(num, 0) + 1);
8-
}
9-
return myMap.entrySet()
10-
.stream()
11-
.sorted((v1, v2) -> Integer.compare(v2.getValue(),v1.getValue()))
12-
.map(Map.Entry::getKey)
13-
.mapToInt(Integer::intValue)
14-
.toArray();
8+
9+
public int[] topKFrequent(int[] nums, int k) {
10+
Map<Integer, Integer> freqMap = new HashMap<>();
11+
for (int num : nums) {
12+
freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);
1513
}
14+
15+
PriorityQueue<Map.Entry<Integer, Integer>> maxHeap =
16+
new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
17+
18+
// ๋นˆ๋„์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ์†Œ ํž™์— k๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋„ฃ๊ธฐ
19+
for (Map.Entry<Integer, Integer> entry : freqMap.entrySet()) {
20+
maxHeap.offer(entry);
21+
}
22+
23+
int[] result = new int[k];
24+
int index = 0;
25+
while (k > 0) {
26+
k--;
27+
result[index++] = maxHeap.poll().getKey();
28+
}
29+
30+
return result;
31+
}
1632
}
33+

โ€Žtwo-sum/eunhwa99.javaโ€Ž

Lines changed: 24 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,41 @@
1-
// ๋ฌธ์ œ ์š”๊ตฌ์‚ฌํ•ญ -> O(n^2) ๋ณด๋‹ค ์ž‘์€ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๊ตฌํ˜„ ํ•„์š”
2-
// ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์ƒ๊ฐ๋‚œ ๊ฒƒ -> ์ด๋ถ„ํƒ์ƒ‰ (2 ์›์†Œ ํ•ฉ์ด target ์ธ ๊ฒƒ์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ)
3-
// ์ด๋ถ„ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„ -> ์ •๋ ฌ(O(nlogn)) + ์ด๋ถ„ํƒ์ƒ‰ (log(n)) -> nlogn
4-
// ๊ณต๊ฐ„ ๋ณต์žก๋„ -> ๋ฐฐ์—ด ํฌ๊ธฐ ๋งŒํผ ๊ณต๊ฐ„ ํ•„์š” (n)
1+
// two pointer
52

63
import java.util.Arrays;
7-
import java.util.HashMap;
4+
import java.util.Comparator;
85

9-
class ValueIndex implements Comparable<ValueIndex> {
10-
int value;
6+
class Point {
117
int index;
8+
int value;
9+
Point(int index, int value){
10+
this.index = index;
11+
this.value = value;}
1212

13-
// ValueIndex ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•  ๋•Œ value ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
14-
@Override
15-
public int compareTo(ValueIndex other) {
16-
return Integer.compare(this.value, other.value);
17-
}
1813
}
1914

20-
class Solution {
21-
15+
// ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nlogn) - ์ •๋ ฌ
16+
// ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) - Point ๊ฐ์ฒด ๋ฐฐ์—ด
17+
class Solution{
2218
public int[] twoSum(int[] nums, int target) {
23-
int size = nums.length;
24-
ValueIndex[] valueIndex = new ValueIndex[size];
25-
for (int i = 0; i < size; ++i) {
26-
valueIndex[i] = new ValueIndex();
27-
valueIndex[i].value = nums[i];
28-
valueIndex[i].index = i; // ์ •๋ ฌ ์ „ original index ์ €์žฅ
19+
Point[] points = new Point[nums.length];
20+
for(int i = 0; i < nums.length; i++){
21+
points[i] = new Point(i, nums[i]);
2922
}
30-
Arrays.sort(valueIndex); // ์ •๋ ฌ
23+
Arrays.sort(points, Comparator.comparingInt(p -> p.value));
24+
int[] result = new int[2];
3125
int left = 0;
3226
int right = nums.length - 1;
33-
3427
while (left < right) {
35-
int leftVal = valueIndex[left].value;
36-
int rightVal = valueIndex[right].value;
37-
int sum = leftVal + rightVal;
38-
39-
if (sum < target) { // target ๋ณด๋‹ค ํ•ฉ์ด ์ž‘์œผ๋ฉด, left ๊ฐ’์ด ์ปค์ ธ์•ผ ํ•จ
40-
left += 1;
41-
} else if (sum > target) {
42-
right -= 1; // target ๋ณด๋‹ค ํ•ฉ์ด ํฌ๋ฉด, right ๊ฐ’์ด ์ž‘์•„์ ธ์•ผ ํ•จ
43-
} else { // sum = target ์ด๋ฉด ๋!
44-
break;
45-
}
46-
}
47-
48-
return new int[]{valueIndex[left].index, valueIndex[right].index};
49-
}
50-
}
51-
52-
53-
/**
54-
* hashMap์„ ์ด์šฉํ•œ O(n) ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. (์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„ O(n))
55-
*/
56-
57-
class Solution {
58-
59-
public int[] twoSum(int[] nums, int target) {
60-
HashMap<Integer, Integer> numMap = new HashMap<>();
61-
int left = 0, right = 0;
62-
for (int i = 0; i < nums.length; i++) {
63-
int complement = target - nums[i]; // ํ˜„์žฌ ์ˆซ์ž์™€ ํ•ฉ์ณ์„œ target์„ ๋งŒ๋“œ๋Š” ์ˆซ์ž
64-
65-
// ์ด๋ฏธ ๊ทธ ์ˆซ์ž๊ฐ€ ํ•ด์‹œ๋งต์— ์žˆ๋‹ค๋ฉด, ๋‘ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜
66-
if (numMap.containsKey(complement)) {
67-
left = numMap.get(complement);
68-
right = i;
28+
int sum = points[left].value + points[right].value;
29+
if (sum == target) {
30+
result[0] = points[left].index;
31+
result[1] = points[right].index;
6932
break;
33+
} else if (sum < target) {
34+
left++;
35+
} else {
36+
right--;
7037
}
71-
72-
// ํ•ด์‹œ๋งต์— ํ˜„์žฌ ์ˆซ์ž์™€ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€
73-
numMap.put(nums[i], i);
7438
}
75-
76-
return new int[]{left, right};
77-
39+
return result;
7840
}
7941
}
80-

0 commit comments

Comments
ย (0)