Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
66eb10c
217 / Contains Duplicate / easy / 22m
wjsdncl Sep 24, 2024
57cd14b
268 / Missing Number / easy / 13m
wjsdncl Sep 24, 2024
51856a1
121 / Best Time to Buy and Sell Stock / easy / 16m
wjsdncl Sep 24, 2024
c9adf07
252 / Meeting Room / easy / 26m
wjsdncl Sep 24, 2024
bf51cd9
15 / 3sum / medium / 42m
wjsdncl Sep 24, 2024
910b70e
242 / Valid Anagram / Easy / 15m33
wjsdncl Oct 1, 2024
cdb702c
238 / Product of Array Except Self / Medium / 35m16
wjsdncl Oct 1, 2024
2bdc3fc
191 / Number of 1 Bits / Easy / 14m32s
wjsdncl Oct 1, 2024
82a66a5
100 / Same Tree / Easy / 24m40s
wjsdncl Oct 1, 2024
c01c584
746 / Min Cost Climbing Stairs / Easy / 29m35s
wjsdncl Oct 1, 2024
ef1983a
746 / Min Cost Climbing Stairs / Easy / 29m35s (์ˆ˜์ •)
wjsdncl Oct 1, 2024
20cf773
1 / Two Sum / easy / 20m 31s
wjsdncl Oct 16, 2024
60169b4
104 / Maximun Depth of Binary Tree / easy / 38m 21s
wjsdncl Oct 16, 2024
8709186
141 / Linked List Cycle / easy / 32m 15s
wjsdncl Oct 16, 2024
4cad496
202 / Happy Number / Easy / 29m 21s
wjsdncl Oct 16, 2024
3fd5282
20 / Valid Parentheses / easy / 22m 41s
wjsdncl Oct 16, 2024
a40ac68
338 / Counting Bits / Easy / 17m
wjsdncl Oct 23, 2024
36ff4f8
70 / Climbing Stairs / Easy / 19m
wjsdncl Oct 23, 2024
03c5b10
21 / Merge Two Sorted Lists / easy / 28m
wjsdncl Oct 23, 2024
7f76659
48 / Rotate Image / medium / 31m
wjsdncl Oct 23, 2024
4e445b4
1046 / Last Stone Weight / easy / 21m
wjsdncl Oct 23, 2024
a58ae73
136 / Single Number / Easy / 12m
wjsdncl Nov 5, 2024
7087413
110 / Balanced Binary Tree / Easy / 35m
wjsdncl Nov 5, 2024
223921d
54 / Spiral Matrix / Medium / 38m
wjsdncl Nov 5, 2024
fe7de3e
973 / K Closest Points to Origin / Medium / 21m
wjsdncl Nov 5, 2024
ad007dc
155 / Min Stack / Medium / 31m
wjsdncl Nov 5, 2024
a4eac3a
128 / Longest Consecutive Sequence / Medium / 26m
wjsdncl Nov 12, 2024
bae77a2
371 / Sum of Two Integers / Medium / 17m
wjsdncl Nov 12, 2024
21e3e7e
208 / Implement Trie (Prefix Tree) / Medium / 24m
wjsdncl Nov 12, 2024
9f78d1a
226 / Invert Binary Tree / Easy / 13m
wjsdncl Nov 12, 2024
1414bf7
543 / Diameter of Binary Tree / Easy / 26m
wjsdncl Nov 12, 2024
c92402b
102 / Binary Tree Level Order Traversal / Medium / 32m
wjsdncl Nov 19, 2024
baab354
572 / Subtree Of Another Tree / Easy / 23m
wjsdncl Nov 19, 2024
10080ca
213 / House Robber II / Medium / 36m
wjsdncl Nov 19, 2024
f13f72f
207 / Course Schedule / Medium / 39m
wjsdncl Nov 19, 2024
18d2ae6
150 / Evaluate Reverse Polish Notation / Medium / 19m
wjsdncl Nov 19, 2024
1d12860
56 / Merge Intervals / medium / 21m
wjsdncl Dec 3, 2024
1a1c75b
1584 / Min Cost to Connect All Points / Medium / 38m
wjsdncl Dec 3, 2024
095541d
235 / Lowest Common Ancestor of a Binary Search Tree / Medium / 28m
wjsdncl Dec 3, 2024
04729be
139 / Word Break / Medium / 13m
wjsdncl Dec 3, 2024
70b8187
215 / Kth Largest Element in an Array / Medium / 13m
wjsdncl Dec 3, 2024
bce2f87
7 / Reverse Interger / Medium / 14m
wjsdncl Dec 3, 2024
8334eb5
743 / Network Delay Time / Medium / 37m
wjsdncl Dec 3, 2024
06e5e5e
39 / Combination Sum / Medium / 29m
wjsdncl Dec 3, 2024
3b9ae7d
2013 / Detect Squares / Medium / 51m
wjsdncl Dec 3, 2024
ec2ec3c
57 / Insert Interval / Medium / 32m
wjsdncl Dec 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions wjsdncl/100_same_tree.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* 24m40s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n) n = ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜
*
* & ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
* ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
* val์€ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์ด๊ณ  left์™€ right๋Š” ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
*
* ๋‘ ํŠธ๋ฆฌ๊ฐ€ ๋ชจ๋‘ null์ธ ๊ฒฝ์šฐ ๋‘ ํŠธ๋ฆฌ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
* ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ null์ด๊ฑฐ๋‚˜ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด ํŠธ๋ฆฌ๋Š” ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
* ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ์žฌ๊ท€์ ์œผ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
* ๋‘ ํŠธ๋ฆฌ๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
*/
var isSameTree = function (p, q) {
// ๋‘˜ ๋‹ค null์ธ ๊ฒฝ์šฐ ๋‘ ํŠธ๋ฆฌ๋Š” ๋™์ผ
if (!p && !q) return true;

// ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ null์ด๊ฑฐ๋‚˜ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด ํŠธ๋ฆฌ๋Š” ๋™์ผํ•˜์ง€ ์•Š์Œ
if (!p || !q || p.val !== q.val) return false;

// ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ์žฌ๊ท€์ ์œผ๋กœ ๋น„๊ต (O(n))
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
};
35 changes: 35 additions & 0 deletions wjsdncl/102_binary_tree_level_order_traversal.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* 32m13s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
*
* ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐ’์„ ๋ ˆ๋ฒจ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
*
* ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ ˆ๋ฒจ ์ˆœ์„œ๋Œ€๋กœ ๋…ธ๋“œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
* ๋นˆ ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
*/
var levelOrder = function (root) {
if (!root) return []; // ๋นˆ ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ ๋นˆ ๋ฐฐ์—ด ๋ฐ˜ํ™˜

const result = [];
const queue = [root]; // ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.

while (queue.length) {
const level = [];
const len = queue.length;

// ํ์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ๋นผ๋‚ด์„œ level ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.
for (let i = 0; i < len; i++) {
const node = queue.shift();
level.push(node.val);

// ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}

result.push(level);
}

return result;
};
26 changes: 26 additions & 0 deletions wjsdncl/1046_last_stone_weight.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* 21m44s ์†Œ์š”
*
* 1. sort()๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
* 2. ๊ฐ€์žฅ ํฐ ๋‘๊ฐœ๋ฅผ ๋นผ๊ณ  ๋บ€ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.
* 3. 2๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ดํ•˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.
* 4. ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
*/
var lastStoneWeight = function (stones) {
// ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ๊ฐ€์žฅ ํฐ ๋‘๊ฐœ๋ฅผ ๋นผ๊ณ  ๋บ€ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค. (O(n^2))
while (stones.length > 1) {
// ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ (O(n log n))
stones.sort((a, b) => b - a);

// ๊ฐ€์žฅ ํฐ ๋‘๊ฐœ๋ฅผ ๋นผ๊ณ  ๋บ€ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค. (O(n))
const first = stones.shift();
const second = stones.shift();

// ๋บ€ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ฉด ๋‹ค์‹œ ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.
if (first !== second) {
stones.push(first - second);
}
}

return stones.length ? stones[0] : 0;
};
22 changes: 22 additions & 0 deletions wjsdncl/104_maximum_depth_of_binary_tree.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* 38m21s
*
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
*
* ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
* ์žฌ๊ท€์ ์œผ๋กœ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๊ตฌํ•˜๊ณ  ๋” ํฐ ๊ฐ’์— 1์„ ๋”ํ•ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
* ๋ฃจํŠธ๊ฐ€ null์ธ ๊ฒฝ์šฐ ๊นŠ์ด๋Š” 0์ž…๋‹ˆ๋‹ค.
*/
var maxDepth = function (root) {
// ๋ฃจํŠธ๊ฐ€ null์ธ ๊ฒฝ์šฐ, ๊นŠ์ด๋Š” 0
if (root === null) {
return 0;
}

// ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋ฅผ ๊ตฌํ•จ
const leftDepth = maxDepth(root.left);
const rightDepth = maxDepth(root.right);

// ๋” ํฐ ๊นŠ์ด์— 1์„ ๋”ํ•ด ๋ฐ˜ํ™˜
return Math.max(leftDepth, rightDepth) + 1;
};
29 changes: 29 additions & 0 deletions wjsdncl/110_balanced_binary_tree.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* 35m 33s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
*
* ์ด์ง„ ํŠธ๋ฆฌ ๊ณต๋ถ€์ข€ ๋” ํ•ด์•ผํ•  ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
*
* 1. ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
* 2. ์žฌ๊ท€์ ์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
* 3. ๋†’์ด ์ฐจ์ด๊ฐ€ 1 ์ด์ƒ์ด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
* 4. ๋†’์ด ์ฐจ์ด๊ฐ€ 1 ์ดํ•˜์ด๋ฉด ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
*/
var isBalanced = function (root) {
const checkHeight = (node) => {
if (node === null) return 0;

const leftHeight = checkHeight(node.left);
if (leftHeight === -1) return -1;

const rightHeight = checkHeight(node.right);
if (rightHeight === -1) return -1;

if (Math.abs(leftHeight - rightHeight) > 1) return -1;

return Math.max(leftHeight, rightHeight) + 1;
};

return checkHeight(root) !== -1;
};
26 changes: 26 additions & 0 deletions wjsdncl/121_best_time_to_buy_and_sell_stock.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
/ 16๋ถ„ ์†Œ์š”
/
/ ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
/
/ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€ ์ด์ต์„ ์ €์žฅํ•ด๋‘๊ณ  ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€ ์ด์ต์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
/ ๋งˆ์ง€๋ง‰ ์ตœ๋Œ€ ์ด์ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
*/
var maxProfit = function (prices) {
let minPrice = prices[0];
let maxProfit = 0;

// ๋ฐฐ์—ด ์ˆœํšŒ (O(n))
for (let i = 1; i < prices.length; i++) {
// ์ตœ์†Œ๊ฐ’ ๊ฐฑ์‹ 
if (prices[i] < minPrice) {
minPrice = prices[i];
}
// ์ตœ๋Œ€ ์ด์ต ๊ฐฑ์‹ 
else if (prices[i] - minPrice > maxProfit) {
maxProfit = prices[i] - minPrice;
}
}

return maxProfit;
};
59 changes: 59 additions & 0 deletions wjsdncl/128_longest_consecutive_sequence.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/**
* 26m13s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
*
* ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์—ฐ์†๋œ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
* ๊ธฐ์กด์— ํ’€์—ˆ๋˜ ๋ฐฉ์‹์€ O(n log n)์ด ์†Œ์š”๋˜๋Š”๋ฐ O(n)์œผ๋กœ ์ค„์ผ ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
*/
var longestConsecutive = function (nums) {
if (nums.length === 0) return 0;

// ์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
let set = new Set(nums);
let max = 1;

for (let num of set) {
// num - 1์ด set์— ์—†๋‹ค๋ฉด num์„ ์‹œ์ž‘์œผ๋กœ ์—ฐ์†๋œ ์ˆซ์ž๋“ค์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
if (!set.has(num - 1)) {
let currentMax = 1;

// num + 1์ด set์— ์žˆ๋‹ค๋ฉด ์—ฐ์†๋œ ์ˆซ์ž๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
while (set.has(num + 1)) {
num++;
currentMax++;
}

// ์ตœ๋Œ€๊ธธ์ด๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
max = Math.max(max, currentMax);
}
}

return max;
};

/*
๊ธฐ์กด ํ’€์ด ๋ฐฉ๋ฒ•

var longestConsecutive = function (nums) {
if (nums.length === 0) return 0;

์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
const arr = Array.from(new Set(nums)).sort((a, b) => a - b);
let count = 1;
let long = 1;

for (let i = 0; i < arr.length; i++) {
ํ˜„์žฌ ์ˆซ์ž๊ฐ€ ์ด์ „ ์ˆซ์ž๋ณด๋‹ค 1 ํฌ๋‹ค๋ฉด ์—ฐ์†๋œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
if (arr[i] === arr[i - 1] + 1) {
count++;
} else {
์—ฐ์†๋œ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
long = Math.max(long, count);
count = 1;
}
}

return Math.max(long, count);
};
*/
19 changes: 19 additions & 0 deletions wjsdncl/136_single_number.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* 12m 21s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
*
* 1. XOR ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ๋‹ค.
* 2. XOR ์—ฐ์‚ฐ์€ ๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
* 3. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ XOR ์—ฐ์‚ฐํ•˜๋ฉด ํ•œ๋ฒˆ๋งŒ ๋‚˜์˜ค๋Š” ์š”์†Œ๋งŒ ๋‚จ๋Š”๋‹ค.
* 4. ๋‚จ์€ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
*/
var singleNumber = function (nums) {
let result = 0;

for (let num of nums) {
result ^= num;
}

return result;
};
33 changes: 33 additions & 0 deletions wjsdncl/139_word_break.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* 13m38s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n^2)
*
* ๋‹จ์–ด s๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๋‹จ์–ด ์‚ฌ์ „ wordDict๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
* ๋‹จ์–ด s๋ฅผ ๋‹จ์–ด ์‚ฌ์ „์„ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
*
* dp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
* dp[i]๋Š” s์˜ 0๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ๋‹จ์–ด ์‚ฌ์ „์„ ์ด์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
* dp[0]์€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ true๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
* dp[i]๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด dp[j]๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. (0 <= j < i)
* dp[j]๊ฐ€ true์ด๊ณ , s์˜ j๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ๋‹จ์–ด ์‚ฌ์ „์— ์žˆ๋Š” ๊ฒฝ์šฐ dp[i]๋ฅผ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
* dp[s.length]๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
*/
var wordBreak = function (s, wordDict) {
const wordSet = new Set(wordDict); // ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ Set ์ƒ์„ฑ
const dp = new Array(s.length + 1).fill(false);
dp[0] = true; // ๋นˆ ๋ฌธ์ž์—ด์€ ํ•ญ์ƒ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

// dp[i]๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด dp[j]๋ฅผ ๊ฒ€์‚ฌ
for (let i = 1; i <= s.length; i++) {
// dp[j]๊ฐ€ true์ด๊ณ , s์˜ j๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ๋‹จ์–ด ์‚ฌ์ „์— ์žˆ๋Š” ๊ฒฝ์šฐ dp[i]๋ฅผ true๋กœ ์„ค์ •
for (let j = 0; j < i; j++) {
if (dp[j] && wordSet.has(s.slice(j, i))) {
dp[i] = true;
break; // ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์œผ๋ฉด ๋” ์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Œ
}
}
}

return dp[s.length];
};
30 changes: 30 additions & 0 deletions wjsdncl/141_linked_list_cycle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* 32m15s
*
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
*
* ์ฐพ์•„๋ณด๋‹ˆ ํ† ๋ผ์™€ ๊ฑฐ๋ถ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
*
* ๋‘ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
* slow๋Š” ํ•œ ์นธ์”ฉ fast๋Š” ๋‘ ์นธ์”ฉ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
* ๋งŒ์•ฝ slow์™€ fast๊ฐ€ ๋งŒ๋‚˜๋ฉด ์‚ฌ์ดํด์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
* ๋งŒ๋‚˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
*/
var hasCycle = function (head) {
let slow = head;
let fast = head;

// fast์™€ fast.next๊ฐ€ null์ด ์•„๋‹Œ ๋™์•ˆ ๋ฐ˜๋ณต
while (fast !== null && fast.next !== null) {
slow = slow.next; // slow๋Š” ํ•œ ์นธ ์ด๋™
fast = fast.next.next; // fast๋Š” ๋‘ ์นธ ์ด๋™

// slow์™€ fast๊ฐ€ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์ดํด ์กด์žฌ
if (slow === fast) {
return true;
}
}

// ๋ฐ˜๋ณต์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋งŒ๋‚˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ดํด์ด ์—†์Œ
return false;
};
43 changes: 43 additions & 0 deletions wjsdncl/150_evaluate_reverse_polish_notation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* 19m26s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
*
* ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง„ reverse polish notation์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
* reverse polish notation๋ฅผ ๋ณด๊ณ  ์–ด๋ ค์šด ์ค„ ์•Œ์•˜๋Š”๋ฐ ๊ทธ๋ƒฅ ์ˆœ์„œ๋Œ€๋กœ ๊ณ„์‚ฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
*
* ์ˆซ์ž์ธ ๊ฒฝ์šฐ ์Šคํƒ์— pushํ•˜๊ณ , ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ ์Šคํƒ์—์„œ ๋‘ ์ˆซ์ž๋ฅผ popํ•˜์—ฌ ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์Šคํƒ์— pushํ•ฉ๋‹ˆ๋‹ค.
* ์ตœ์ข…์ ์œผ๋กœ ์Šคํƒ์— ๋‚จ์•„ ์žˆ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
*/
var evalRPN = function (tokens) {
const stack = [];

for (let token of tokens) {
if (!isNaN(token)) {
// ์ˆซ์ž์ธ ๊ฒฝ์šฐ ์Šคํƒ์— push
stack.push(Number(token));
} else {
// ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ ์Šคํƒ์—์„œ ๋‘ ์ˆซ์ž๋ฅผ pop
const b = stack.pop();
const a = stack.pop();

switch (token) {
case "+":
stack.push(a + b);
break;
case "-":
stack.push(a - b);
break;
case "*":
stack.push(a * b);
break;
case "/":
stack.push(parseInt(a / b));
break;
}
}
}

// ์Šคํƒ์— ๋‚จ์•„ ์žˆ๋Š” ์ตœ์ข… ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
return stack.pop();
};
33 changes: 33 additions & 0 deletions wjsdncl/155_min_stack.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* 31m 11s ์†Œ์š”
*
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(1)
*
* ์ง€ํ”ผํ‹ฐ์™€ ํ•จ๊ป˜ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค ์–ด๋ ต๋„ค์š”
*/
var MinStack = function () {
this.stack = [];
this.minStack = [];
};

MinStack.prototype.push = function (val) {
this.stack.push(val);
if (this.minStack.length === 0 || val <= this.minStack[this.minStack.length - 1]) {
this.minStack.push(val);
}
};

MinStack.prototype.pop = function () {
const poppedValue = this.stack.pop();
if (poppedValue === this.minStack[this.minStack.length - 1]) {
this.minStack.pop();
}
};

MinStack.prototype.top = function () {
return this.stack[this.stack.length - 1];
};

MinStack.prototype.getMin = function () {
return this.minStack[this.minStack.length - 1];
};
Loading
Loading