Skip to content

Commit 2ea1985

Browse files
authored
Merge pull request #2377 from nowrobin/main
[robinhan] WEEK 01 solutions
2 parents 0f9f438 + f58aced commit 2ea1985

5 files changed

Lines changed: 115 additions & 0 deletions

File tree

contains-duplicate/nowrobin.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {boolean}
4+
*/
5+
var containsDuplicate = function(nums) {
6+
return new Set(nums).size != nums.length;
7+
};
8+
9+
// 40ms 80.33MB

house-robber/nowrobin.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var rob = function(nums) {
6+
// 집의 개수
7+
const n = nums.length;
8+
9+
// 집이 하나뿐이면 그 집을 터는 것이 최대값
10+
if (n === 1) {
11+
return nums[0];
12+
}
13+
14+
// dp[i] = 0번 집부터 i번 집까지 고려했을 때 훔칠 수 있는 최대 금액
15+
const dp = Array(n).fill(0);
16+
17+
// 첫 번째 집까지의 최대 금액
18+
dp[0] = nums[0];
19+
20+
// 두 번째 집까지의 최대 금액
21+
// 두 집은 동시에 털 수 없으므로 둘 중 큰 값을 선택
22+
dp[1] = Math.max(nums[0], nums[1]);
23+
24+
// 세 번째 집부터 마지막 집까지 반복
25+
for (let i = 2; i < n; i++) {
26+
27+
// 두 가지 선택지 중 더 큰 값을 선택
28+
// 1️⃣ 현재 집을 털지 않는다 → 이전 집까지의 최대 금액(dp[i-1])
29+
// 2️⃣ 현재 집을 턴다 → 전전 집까지의 최대 금액(dp[i-2]) + 현재 집 돈(nums[i])
30+
dp[i] = Math.max(dp[i - 1], nums[i] + dp[i - 2]);
31+
}
32+
33+
// 마지막 집까지 고려했을 때의 최대 금액 반환
34+
return dp[n - 1];
35+
};
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* 주어진 숫자 배열에서 가장 긴 연속된 수열의 길이를 찾는다.
3+
* 시간복잡도: O(n)
4+
* 이유: 각 숫자는 최대 한 번만 시작점으로 검사되고,
5+
* 연속 수열 탐색도 중복 없이 진행된다.
6+
*
7+
* @param {number[]} nums
8+
* @return {number}
9+
*/
10+
var longestConsecutive = function(nums) {
11+
12+
// 배열을 Set으로 변환
13+
const numSet = new Set(nums);
14+
15+
// 가장 긴 연속 길이를 저장
16+
let longest = 0;
17+
// Set을 순회
18+
for (let n of numSet) {
19+
// 현재 숫자가 연속 수열의 "시작점"인지 확인
20+
// n-1 이 존재하면 이미 앞에 전 수열 존재함
21+
if (!numSet.has(n - 1)) {
22+
23+
// 시작하는 수열 길이
24+
let length = 1;
25+
26+
// 계속 존재하는지 확인
27+
while (numSet.has(n + length)) {
28+
length++;
29+
}
30+
// 지금까지 찾은 최대 길이 갱신
31+
longest = Math.max(longest, length);
32+
}
33+
}
34+
return longest;
35+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number[]}
5+
*/
6+
7+
// 13ms 60mb
8+
var topKFrequent = function(nums, k) {
9+
let freq = new Map()
10+
for(let i of nums){
11+
freq.set(i, (freq.get(i)|| 0) + 1 )
12+
}
13+
const sorted = [...freq.entries()].sort((a, b) => b[1] - a[1]);
14+
let result = []
15+
for (let j =0 ; j< k ; j++){
16+
result.push(sorted[j][0])
17+
}
18+
return result
19+
};

two-sum/nowrobin.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[]}
5+
*/
6+
7+
// 34ms 54mb
8+
var twoSum = function(nums, target) {
9+
for (let i = 0; i < nums.length; i++) {
10+
for (let j = i + 1; j < nums.length; j++) {
11+
if (nums[j] === target - nums[i]) {
12+
return [i, j];
13+
}
14+
}
15+
}
16+
return []
17+
};

0 commit comments

Comments
 (0)