Skip to content

Commit 95911bc

Browse files
authored
Merge pull request #2421 from sadie100/main
[sadie100] WEEK 02 Solutions
2 parents 3ff060e + 7da8e35 commit 95911bc

5 files changed

Lines changed: 165 additions & 0 deletions

File tree

โ€Ž3sum/sadie100.tsโ€Ž

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ ๋’ค ์—˜๋ฆฌ๋จผํŠธ ํ•˜๋‚˜๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๋ณด๋‹ค ํฐ ๋ฒ”์œ„์—์„œ ํˆฌ ํฌ์ธํ„ฐ ์ˆœํšŒ๋กœ ํ•ฉ์ด -{์—˜๋ฆฌ๋จผํŠธ๊ฐ’} ์ด ๋˜๋Š” ์Œ์„ ์ฐพ๋Š” ๋กœ์ง์„ ๋ชจ๋“  ๋ฐฐ์—ด ์—˜๋ฆฌ๋จผํŠธ์— ์ˆœํšŒํ•˜๋ฉฐ ์ ์šฉํ•œ๋‹ค
3+
4+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N^2)
5+
=> ์—˜๋ฆฌ๋จผํŠธ ๊ณ ์ • ์ˆœํšŒ n * ํˆฌ ํฌ์ธํ„ฐ ์ˆœํšŒ n
6+
7+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N)
8+
=> ์ •๋ ฌ๋œ ๋ฐฐ์—ด
9+
*/
10+
11+
function threeSum(nums: number[]): number[][] {
12+
const sortedNums = nums.sort((a, b) => a - b)
13+
const result = []
14+
let beforeIVal
15+
16+
for (let i = 0; i < nums.length; i++) {
17+
const idxVal = sortedNums[i]
18+
if (beforeIVal !== undefined && beforeIVal === idxVal) {
19+
continue
20+
}
21+
beforeIVal = idxVal
22+
const shouldBe = -idxVal
23+
let start = i + 1
24+
let end = nums.length - 1
25+
26+
while (start < end) {
27+
const startVal = sortedNums[start]
28+
const endVal = sortedNums[end]
29+
const value = startVal + endVal
30+
if (value === shouldBe) {
31+
result.push([idxVal, startVal, endVal])
32+
start += 1
33+
end -= 1
34+
while (startVal === sortedNums[start]) {
35+
start += 1
36+
}
37+
while (endVal === sortedNums[end]) {
38+
end -= 1
39+
}
40+
} else if (value > shouldBe) {
41+
end -= 1
42+
} else {
43+
start += 1
44+
}
45+
}
46+
}
47+
48+
return result
49+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
3+
n+1๊ฐœ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ์ˆœํšŒ๋ฅผ ๋Œ๋ฆฌ๋ฉฐ i-1, i-2๋ฅผ ํ•ฉํ•œ๋‹ค
4+
5+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N) => n ๋ฐฐ์—ด ์ˆœํšŒ
6+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N) => n+1 ๋ฐฐ์—ด
7+
*/
8+
9+
function climbStairs(n: number): number {
10+
const stair = new Array(n + 1).fill(0)
11+
12+
stair[0] = 1
13+
stair[1] = 1
14+
15+
if (n < 1) return stair[n]
16+
17+
for (let i = 2; i < n + 1; i++) {
18+
stair[i] = stair[i - 1] + stair[i - 2]
19+
}
20+
21+
return stair[n]
22+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
answer[i] = numbers[0], ... numbers[i-1], numbers[i+1], ... number[n-1]์˜ ๊ณฑ์ž„์„ ํ™œ์šฉํ•˜์—ฌ
3+
nums๋ฅผ 1๋ถ€ํ„ฐ n-1๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉฐ i-1๊นŒ์ง€์˜ ๊ณฑ์„ answer[i]์— ์ฑ„์šฐ๊ณ ,
4+
๋ฐ˜๋Œ€๋กœ n-2๋ถ€ํ„ฐ 0๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉฐ i+1๊นŒ์ง€์˜ ๊ณฑ์„ answer[i]์— ์ฑ„์šด๋‹ค
5+
6+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N) => 2N๋ฒˆ ์ˆœํšŒ
7+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N) => number[] ๋ฐฐ์—ด ์‚ฌ์šฉ
8+
*/
9+
10+
function productExceptSelf(nums: number[]): number[] {
11+
const answer = new Array(nums.length).fill(1)
12+
13+
let multiVal = 1
14+
for (let i = 1; i < nums.length; i++) {
15+
multiVal *= nums[i - 1]
16+
answer[i] *= multiVal
17+
}
18+
19+
multiVal = 1
20+
for (let i = nums.length - 2; i >= 0; i--) {
21+
multiVal *= nums[i + 1]
22+
answer[i] *= multiVal
23+
}
24+
25+
return answer
26+
}

โ€Žvalid-anagram/sadie100.tsโ€Ž

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
s์˜ ๋ฌธ์ž ๋นˆ๋„๋ฅผ ๊ธฐ๋กํ•˜๋Š” charMap์„ ๋งŒ๋“ค๊ณ , t๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ charMap์˜ ๋นˆ๋„๋ฅผ 1์”ฉ ์ค„์—ฌ ๊ฐ€๋ฉฐ ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค.
3+
4+
์‹œ๊ฐ„๋ณต์žก๋„: O(N) (s์˜ length N)
5+
6+
*/
7+
8+
function isAnagram(s: string, t: string): boolean {
9+
if (s.length !== t.length) return false
10+
const charMap = new Map()
11+
12+
for (let char of s) {
13+
charMap.set(char, (charMap.get(char) || 0) + 1)
14+
}
15+
16+
for (let char of t) {
17+
if (!charMap.has(char) || charMap.get(char) === 0) {
18+
return false
19+
}
20+
charMap.set(char, charMap.get(char) - 1)
21+
}
22+
23+
return true
24+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
/*
16+
ํ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฃจํŠธ์—์„œ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ๋…ธ๋“œ, max๊ฐ’(left๋กœ ๋น ์งˆ ๋•Œ ํ˜„์žฌ ๋…ธ๋“œ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ), min๊ฐ’(right๋กœ ๋น ์งˆ ๋•Œ ํ˜„์žฌ ๋…ธ๋“œ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ )์„ ์ „๋‹ฌํ•˜๊ณ ,
17+
ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ min max ํ•œ๋„๋ฅผ ๊ฒ€์‚ฌ, ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
18+
19+
์‹œ๊ฐ„๋ณต์žก๋„ : O(N) (N์€ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜)
20+
๊ณต๊ฐ„๋ณต์žก๋„ : O(N) (queue ์‚ฌ์šฉ)
21+
*/
22+
23+
function isValidBST(root: TreeNode | null): boolean {
24+
if (root === null) return true
25+
const queue: [TreeNode, number | null, number | null][] = [[root, null, null]]
26+
let idx = 0
27+
28+
while (idx < queue.length) {
29+
const [node, min, max] = queue[idx]
30+
31+
if (min !== null && node.val <= min) return false
32+
if (max !== null && node.val >= max) return false
33+
34+
if (node.left) {
35+
queue.push([node.left, min, node.val])
36+
}
37+
if (node.right) {
38+
queue.push([node.right, node.val, max])
39+
}
40+
idx += 1
41+
}
42+
43+
return true
44+
}

0 commit comments

Comments
ย (0)