Skip to content

Commit 532fe03

Browse files
authored
Merge pull request #980 from jdy8739/main
[jdy8739] Week9
2 parents f2b9477 + 024f8d3 commit 532fe03

File tree

4 files changed

+218
-0
lines changed

4 files changed

+218
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var findMin = function (nums) {
6+
while (1 < nums.length) {
7+
8+
const mid = Math.floor(nums.length / 2);
9+
10+
const firstToHalf = [...nums].slice(0, mid);
11+
12+
const midToEnd = [...nums].slice(mid, nums.length);
13+
14+
const isInFront = Math.min(...firstToHalf) < Math.min(...midToEnd);
15+
16+
nums = isInFront ? firstToHalf : midToEnd;
17+
}
18+
19+
return nums[0];
20+
};
21+
22+
// ์‹œ๊ฐ„๋ณต์žก๋„ 0(logn) -> ์ด์ง„ํƒ์ƒ‰์„ ํ†ตํ•ด ๋ฐฐ์—ด nums๋ฅผ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ๊ฐ€๋ฉฐ ํ•ด๋‹ต์„ ์ฐพ๊ธฐ๋•Œ๋ฌธ์—
23+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(n) -> ์ฒ˜์Œ while๋ฌธ์ด ๋Œ ๋•Œ, nums๋ฅผ ์ชผ๊ฐ  ๋‘ ๋ฐฐ์—ด ์ด ๊ธธ์ด์˜ ํ•ฉ์€ nums์˜ ์ฒ˜์Œ ๊ธธ์ด์™€ ๊ฐ™๊ธฐ๋•Œ๋ฌธ์—

โ€Žlinked-list-cycle/jdy8739.js

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val) {
4+
* this.val = val;
5+
* this.next = null;
6+
* }
7+
*/
8+
9+
/**
10+
* @param {ListNode} head
11+
* @return {boolean}
12+
*/
13+
var hasCycle = function (head) {
14+
if (!head?.next) {
15+
return false;
16+
}
17+
18+
let current = head;
19+
20+
const set = new Set();
21+
22+
while (current.next) {
23+
if (set.has(current)) {
24+
return true;
25+
}
26+
27+
set.add(current);
28+
current = current.next;
29+
}
30+
31+
return false;
32+
};
33+
34+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) -> ์ตœ๋Œ€ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์ˆ˜ ๋งŒํผ while๋ฌธ์ด ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ
35+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(n) -> set์— ์ตœ๋Œ€ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์ˆ˜ ๋งŒํผ size๊ฐ€ ์ฆ๊ฐ€๋˜๋ฏ€๋กœ
36+
37+
38+
/**
39+
* Definition for singly-linked list.
40+
* function ListNode(val) {
41+
* this.val = val;
42+
* this.next = null;
43+
* }
44+
*/
45+
46+
/**
47+
* @param {ListNode} head
48+
* @return {boolean}
49+
*/
50+
var hasCycle = function(head) {
51+
if (!head?.next) {
52+
return false;
53+
}
54+
55+
let turtle = head;
56+
let rabbit = head;
57+
58+
while (turtle.next && rabbit.next) {
59+
if (turtle === rabbit) {
60+
return true;
61+
}
62+
63+
turtle = turtle.next;
64+
rabbit = rabbit.next.next;
65+
}
66+
67+
return false;
68+
};
69+
70+
/**
71+
* Definition for singly-linked list.
72+
* function ListNode(val) {
73+
* this.val = val;
74+
* this.next = null;
75+
* }
76+
*/
77+
78+
/**
79+
* @param {ListNode} head
80+
* @return {boolean}
81+
*/
82+
var hasCycle = function (head) {
83+
if (!head?.next || !head?.next.next) {
84+
return false;
85+
}
86+
87+
let turtle = head;
88+
let rabbit = head;
89+
90+
while (turtle && rabbit?.next) {
91+
turtle = turtle.next;
92+
rabbit = rabbit.next.next;
93+
94+
if (turtle === rabbit) {
95+
return true;
96+
}
97+
}
98+
99+
return false;
100+
};
101+
102+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) -> ์ตœ๋Œ€ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ ์ˆ˜ ๋งŒํผ while๋ฌธ์ด ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ
103+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(1) -> ๊ณ ์ •๋œ ๋‘ ๋ณ€์ˆ˜ turtle, rabbit์„ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— (๊ฑฐ๋ถ์ด์™€ ํ† ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var maxProduct = function (nums) {
6+
let answer = nums[0];
7+
let max = 1;
8+
let min = 1;
9+
10+
for (let i = 0; i < nums.length; i++) {
11+
const current = nums[i];
12+
13+
const candidates = [max * current, min * current, current];
14+
15+
max = Math.max(...candidates);
16+
min = Math.min(...candidates);
17+
answer = Math.max(answer, max);
18+
}
19+
20+
return answer;
21+
};
22+
23+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(n) * O(8) -> nums์˜ ๊ธธ์ด ๋งŒํผ์„ for ๋ฌธ์œผ๋กœ ์ˆœํ™˜ํ•˜๋ฉด์„œ Mathํด๋ž˜์Šค์˜ max, min๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ(์ธ์ž๊ฐ€ 3๊ฐœ, 3๊ฐœ, 2๊ฐœ ์ด๋ฏ€๋กœ ์ด 8ํšŒ ์ˆœํšŒ)
24+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(1) -> ํŒŒ๋ผ๋ฏธํ„ฐ nums์— ๋Œ€ํ•ด ์˜๋ฏธ์žˆ๋Š” ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜ํ• ๋‹น์ด ์—†์Œ
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {string}
5+
*/
6+
var minWindow = function (s, t) {
7+
let start = 0;
8+
let end = 0;
9+
10+
/** t์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์ด ์Šฌ๋ผ์ด๋“œ ์œˆ๋„์šฐ์˜ ๋ฒ”์œ„์— ๋“ค์–ด์™”์„ ๋•Œ, ๊ทธ ๋ฒ”์œ„์˜ ์ตœ์†Œ ๊ธธ์ด */
11+
let min = s.length;
12+
13+
/** while ๋ฌธ์ด ํ•œ ๋ฒˆ ์ˆœํšŒํ•  ๋•Œ, start ๋˜๋Š” end๊ฐ’ ์ค‘ end๊ฐ’์ด ์ฆ๊ฐ€ํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€ */
14+
let isEndIndexUp = true;
15+
16+
/** min ๊ฐ’์ด ๊ฐฑ์‹ ๋˜๋ฉด s๋ฌธ์ž์—ด์˜ start, end ์ธ๋ฑ์Šค๊ฐ’์„ ์ €์žฅํ•  ๋ณ€์ˆ˜ */
17+
let index = null;
18+
19+
/** ๋ฌธ์ž์—ด t๊ฐ€ ๋ณด์œ ํ•œ ๋ฌธ์ž์™€ ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋ฅผ key, value๋กœ ์„ค์ •ํ•œ map๊ฐ์ฒด */
20+
const charMap = t.split('').reduce((acc, cur) => {
21+
if (acc.has(cur)) {
22+
acc.set(cur, acc.get(cur) + 1);
23+
} else {
24+
acc.set(cur, 1);
25+
}
26+
27+
return acc;
28+
}, new Map());
29+
30+
while (end < s.length) {
31+
const curChar = s[end];
32+
33+
if (isEndIndexUp && t.includes(curChar)) {
34+
// end๊ฐ€ ์ฆ๊ฐ๋˜์—ˆ๊ณ  s์˜ end ์ธ๋ฑ์Šค์˜ ๋ฌธ์ž๊ฐ€ t์— ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํ‚ค์˜ ๊ฐ’์— 1์„ ๊ฐ์†Œ
35+
charMap.set(curChar, charMap.get(curChar) - 1);
36+
}
37+
38+
/** ๋ชจ๋“  t์˜ ๋ฌธ์ž๋“ค์ด ์Šฌ๋ผ์ด๋“œ ์œˆ๋„์šฐ์˜ ๋ฒ”์œ„์— ๋“ค์–ด์™”๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ถˆ๋ฆฐ๊ฐ’ */
39+
const everyCharCollected = [...charMap].every(([_, value]) => value <= 0);
40+
41+
if (everyCharCollected) {
42+
// ๋ชจ๋“  ๋ฌธ์ž์—ด์ด ์Šฌ๋ผ์ด๋“œ ์œˆ๋„์šฐ์˜ ๋ฌธ์ž์—ด์— ํฌ์ฐฉ๋œ ๊ฒฝ์šฐ
43+
if (t.includes(s[start])) {
44+
// s์˜ start ์ธ๋ฑ์Šค ๋ฌธ์ž๊ฐ€ t์— ์กด์žฌํ•œ๋‹ค๋ฉด charMap์— ํ•ด๋‹น ํ‚ค์˜ ๊ฐ’์— 1์„ ์ฆ๊ฐ
45+
charMap.set(s[start], (charMap.get(s[start]) || 0) + 1);
46+
}
47+
48+
const gap = end - start;
49+
if (gap < min) {
50+
// t์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์Šฌ๋ผ์ด๋“œ ์œˆ๋„์šฐ์˜ ๋ฒ”์œ„์— ์žˆ๊ณ , ํ˜„์žฌ ๊ทธ ์œˆ๋„์šฐ์˜ ๊ธธ์ด๊ฐ€ ์ด์ „์˜ min๊ฐ’ ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ
51+
min = gap;
52+
index = [start, end];
53+
}
54+
55+
start++;
56+
isEndIndexUp = false;
57+
} else {
58+
// ์œˆ๋„์šฐ์— ๋ฌธ์ž์—ด์ด ํ•˜๋‚˜๋ผ๋„ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ
59+
end++;
60+
isEndIndexUp = true;
61+
}
62+
}
63+
64+
return index ? s.slice(index[0], index[1] + 1) : '';
65+
};
66+
67+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(t) -> ์ตœ๋Œ€ t์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ๋งต์˜ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ
68+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(s * t) -> s๋ฅผ ์ˆœํšŒํ•˜๋Š” while ๋ฌธ์—์„œ ์ตœ๋Œ€ O(t)์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋”ฐ๋ฅด๋Š” map ๊ฐ์ฒด๊ฐ€ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜๋˜์–ด every ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์—

0 commit comments

Comments
ย (0)