Skip to content

Commit 95516a4

Browse files
authored
Merge pull request #2301 from radiantchoi/main
[radiantchoi] WEEK 12 Solutions
2 parents e352782 + 88e57f0 commit 95516a4

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Definition for singly-linked list.
2+
public class ListNode {
3+
public var val: Int
4+
public var next: ListNode?
5+
public init() { self.val = 0; self.next = nil; }
6+
public init(_ val: Int) { self.val = val; self.next = nil; }
7+
public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
8+
}
9+
10+
class Solution {
11+
func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
12+
// ๋’ค์—์„œ n๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ Two Pointer
13+
var slow = head
14+
var fast = head
15+
var threshold = n
16+
17+
// fast ํฌ์ธํ„ฐ๋ฅผ n๋งŒํผ ์ด๋™์‹œํ‚ด
18+
// ์ „์ฒด ๊ฐฏ์ˆ˜๋ฅผ c๊ฐœ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ๋’ค์—์„œ n๋ฒˆ์งธ ๋…ธ๋“œ๋Š” ์•ž์—์„œ c - n + 1๋ฒˆ์งธ ๋…ธ๋“œ
19+
while threshold > 0 {
20+
fast = fast?.next
21+
threshold -= 1
22+
}
23+
24+
// padding ๋…ธ๋“œ ์ƒ์„ฑ
25+
var prev: ListNode? = ListNode()
26+
// slow ํฌ์ธํ„ฐ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ „๋žต - prev ํฌ์ธํ„ฐ๋ฅผ slow ํฌ์ธํ„ฐ์˜ ์ด์ „ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ด
27+
prev?.next = slow
28+
29+
// ๋ฐ˜ํ™˜์„ ์œ„ํ•œ result ๋…ธ๋“œ ํฌ์ธํ„ฐ ์ƒ์„ฑ
30+
let result = prev
31+
32+
while fast != nil {
33+
prev = prev?.next
34+
slow = slow?.next
35+
fast = fast?.next
36+
}
37+
38+
// fast ๋…ธ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ nil์ด ๋˜์—ˆ๊ณ ,
39+
// slow ๋…ธ๋“œ๋Š” ๋’ค์—์„œ n๋ฒˆ์งธ ์ž๋ฆฌ์— ์œ„์น˜ํ•ด ์žˆ์Œ
40+
// ๊ทธ๋ณด๋‹ค ํ•œ ์นธ ์•ž์— ์žˆ๋Š” prev ๋…ธ๋“œ์˜ next๋ฅผ, next?.next๋กœ ๋ฐ”๊ฟ” ์ฃผ๋ฉด, slow ๋ถ€๋ถ„์˜ ๋…ธ๋“œ ์ œ๊ฑฐ
41+
prev?.next = prev?.next?.next
42+
43+
// ๋ฐ˜ํ™˜์‹œ ๋งจ ์•ž์˜ padding ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐ
44+
return result?.next
45+
}
46+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Definition for a binary tree node.
2+
public class TreeNode {
3+
public var val: Int
4+
public var left: TreeNode?
5+
public var right: TreeNode?
6+
public init() { self.val = 0; self.left = nil; self.right = nil; }
7+
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
8+
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
9+
self.val = val
10+
self.left = left
11+
self.right = right
12+
}
13+
}
14+
15+
class Solution {
16+
// ์ข…๋ฃŒ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๊ณ  ์žฌ๊ท€๋กœ ๋Œ๋ ค์„œ ํŠธ๋ฆฌ ์ „์ฒด๋ฅผ ์ ๊ฒ€ - DFS
17+
func isSameTree(_ p: TreeNode?, _ q: TreeNode?) -> Bool {
18+
// ๋‘˜ ๋‹ค nil์ด๋ฉด ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ - TreeNode๋Š” Equatable์„ ์ฑ„ํƒํ•˜์ง€ ์•Š์•„์„œ, p == q์™€ ๊ฐ™์€ ์ง์ ‘ ๋น„๊ต๋Š” ๋ถˆ๊ฐ€๋Šฅ
19+
if p == nil && q == nil { return true }
20+
// ๋‘˜ ๋‹ค nil์ธ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ํ•œ ์ชฝ์ด๋ผ๋„ nil์ด๋ฉด ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ false
21+
guard let p, let q else { return false }
22+
// ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด false
23+
guard p.val == q.val else { return false }
24+
25+
// ๋‘˜ ๋‹ค nil์ด ์•„๋‹ˆ๊ณ , ๊ฐ’์ด ๊ฐ™์Œ๊นŒ์ง€ ๊ฒ€์ฆํ•œ ์ƒํƒœ
26+
if p.isLeafNode && q.isLeafNode {
27+
// ์ž์‹์ด ์—†๋‹ค๋ฉด true ๋ฐ˜ํ™˜
28+
return true
29+
} else {
30+
// ์ž์‹์ด ์žˆ๋‹ค๋ฉด ์ž์‹๋“ค์— ๋Œ€ํ•ด ๊ฐ๊ฐ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰
31+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
32+
}
33+
}
34+
}
35+
36+
extension TreeNode {
37+
var isLeafNode: Bool {
38+
left == nil && right == nil
39+
}
40+
}

0 commit comments

Comments
ย (0)