Skip to content

Commit 547b2dc

Browse files
committed
feat : week 3
1 parent f38fc83 commit 547b2dc

File tree

5 files changed

+144
-0
lines changed

5 files changed

+144
-0
lines changed

โ€Žcombination-sum/imsosleepy.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// ์ฒ˜์Œ์—” dp๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, backtracking์ธ๊ฑธ ์•Œ์•„์ฐจ๋ฆฌ์ž๋งˆ์ž ํ’€ ์ˆ˜ ์žˆ์—ˆ์Œ
2+
// ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์† ์ „๋‹ฌํ•˜๋Š”๊ฒŒ ํŒ
3+
class Solution {
4+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
5+
List<List<Integer>> result = new ArrayList<>();
6+
backtracking(candidates, target, 0, new ArrayList<>(), result);
7+
return result;
8+
}
9+
10+
private void backtracking(int[] candidates, int target, int start, List<Integer> tmp, List<List<Integer>> result) {
11+
if (target < 0) {
12+
return;
13+
}
14+
15+
if (target == 0) {
16+
result.add(new ArrayList<>(tmp));
17+
return;
18+
}
19+
20+
for (int i = start; i < candidates.length; i++) {
21+
tmp.add(candidates[i]);
22+
backtracking(candidates, target - candidates[i], i, tmp, result);
23+
tmp.remove(tmp.size() - 1);
24+
}
25+
}
26+
}

โ€Žmaximum-subarray/imsosleepy.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// subarray = "์—ฐ์†๋œ ๊ฐ’"์˜ ํ•ฉ์„ ์š”๊ตฌ ํ•จ ๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํ•œ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
2+
// ์ด์ „ ์ธ๋ฑ์Šค๋‚˜ ๊ฐ’๋“ค์„ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋ˆ„์ ํ•ฉ ๋А๋‚Œ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
3+
// ํ‚คํฌ์ธํŠธ๋Š” ์ด์ „๊นŒ์ง€์˜ ํ•ฉ๋ณด๋‹ค ๋‹ค์Œ ์ˆซ์ž๊ฐ€ ํฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ
4+
class Solution {
5+
public int maxSubArray(int[] nums) {
6+
int max = nums[0];
7+
int current = nums[0];
8+
9+
for (int i = 1; i < nums.length; i++) {
10+
current = Math.max(nums[i], current + nums[i]);
11+
max = Math.max(max, current);
12+
}
13+
14+
return max;
15+
}
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
// ๋ˆ„์ ๊ณฑ์„ ์ด์šฉํ•œ ํ’€์ด int ํฌ๊ธฐ๋ฅผ ๋ณด์žฅํ•ด์ค˜์„œ int๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด๋œ๋‹ค.
3+
// O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚˜์˜จ๋‹ค.
4+
public int[] productExceptSelf(int[] nums) {
5+
int n = nums.length;
6+
int[] result = new int[n];
7+
result[0] = 1;
8+
for (int i = 1; i < n; i++) {
9+
result[i] = result[i - 1] * nums[i - 1];
10+
}
11+
12+
int right = 1;
13+
for (int i = n - 1; i >= 0; i--) {
14+
result[i] = result[i] * right;
15+
right *= nums[i];
16+
}
17+
18+
return result;
19+
}
20+
}

โ€Žreverse-bits/imsosleepy.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// ์Šคํƒ์œผ๋กœ ํ’€๊ธฐ๋ณด๋‹ค ๋น„ํŠธ์—ฐ์‚ฐ์ž๋กœ ํ’€์ด
2+
// ์Šคํƒ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” 32์ž๋ฆฌ์˜ ๋ถˆํ•„์š”ํ•œ ๊ณต๊ฐ„์ด ์ƒ๊ธด๋‹ค.
3+
public class Solution {
4+
public int reverseBits(int n) {
5+
// n ์ด ์‹ญ์ง„์ˆ˜๋กœ ๋“ค์–ด์˜จ๋‹ค.(์ค‘์š”)
6+
int result = 0;
7+
for (int i = 0; i < 32; i++) {
8+
// ๋งˆ์ง€๋ง‰ ๋น„ํŠธ ํ™•์ธ
9+
// ํ™€์ˆ˜: ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๊ฐ€ 1 (n & 1 == 1)
10+
// ์ง์ˆ˜: ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๊ฐ€ 0 (n & 1 == 0)
11+
int bit = n & 1;
12+
// result๋ฅผ ์™ผ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์ด๋™ํ•˜๊ณ , ์ถ”์ถœํ•œ ๋น„ํŠธ๋ฅผ ์ถ”๊ฐ€
13+
// - result์˜ ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๋ฅผ ๋น„์šฐ๊ณ  (<< 1)
14+
// - OR ์—ฐ์‚ฐ(|)์œผ๋กœ ์ถ”์ถœํ•œ ๋น„ํŠธ๋ฅผ ์ถ”๊ฐ€
15+
result = (result << 1) | bit;
16+
17+
// n์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ๋น„ํŠธ๋ฅผ ์ค€๋น„
18+
// - n์˜ ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๋ฅผ ๋ฒ„๋ฆฌ๊ณ , ์ƒ์œ„ ๋น„ํŠธ๋ฅผ ์•„๋ž˜๋กœ ์ด๋™
19+
n >>= 1;
20+
}
21+
return result;
22+
}
23+
}

โ€Žtwo-sum/imsosleepy.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// hashmap ์กฐํšŒ ๋ฐฉ์‹์€ O(N)
2+
// 3ms
3+
public int[] twoSum(int[] nums, int target) {
4+
Map<Integer, Integer> map = new HashMap<>();
5+
for (int i = 0; i < nums.length; i++) {
6+
int complement = target - nums[i];
7+
if (map.containsKey(complement)) {
8+
return new int[] { map.get(complement), i };
9+
}
10+
map.put(nums[i], i);
11+
}
12+
return null;
13+
}
14+
15+
// ์ฒซ ์ƒ๊ฐ : ์ •๋ ฌ -> ํˆฌํฌ์ธํ„ฐ
16+
public int[] twoSum1(int[] nums, int target) {
17+
Arrays.sort(nums);
18+
int left = 0;
19+
int right = nums.length-1;
20+
int sum = 0;
21+
while(left < right) {
22+
sum = nums[left] + nums[right];
23+
if(target > sum) {
24+
left++;
25+
}
26+
if(target < sum) {
27+
right--;
28+
}
29+
if(target == sum) {
30+
break;
31+
}
32+
}
33+
return new int[]{left, right};
34+
}
35+
36+
// ํˆฌํฌ์ธํ„ฐ๋Š” O(N)์— ์ถฉ์กฑํ•˜์ง€๋งŒ ์ •๋ ฌ์ด nlog(n)์ž„
37+
// 9ms
38+
public int[] twoSum2(int[] nums, int target) {
39+
int[][] indexedNums = new int[nums.length][2];
40+
for (int i = 0; i < nums.length; i++) {
41+
indexedNums[i][0] = nums[i];
42+
indexedNums[i][1] = i;
43+
}
44+
45+
Arrays.sort(indexedNums, Comparator.comparingInt(a -> a[0]));
46+
47+
int left = 0, right = nums.length - 1;
48+
while (left < right) {
49+
int sum = indexedNums[left][0] + indexedNums[right][0];
50+
if (sum == target) {
51+
return new int[] { indexedNums[left][1], indexedNums[right][1] };
52+
} else if (sum < target) {
53+
left++;
54+
} else {
55+
right--;
56+
}
57+
}
58+
return new int[]{left, right};
59+
}

0 commit comments

Comments
ย (0)