Skip to content

Commit 2368a2a

Browse files
authored
Merge pull request #1224 from kut7728/main
[kut7728] WEEK 02 solutions
2 parents b8027d1 + c509723 commit 2368a2a

File tree

5 files changed

+172
-0
lines changed

5 files changed

+172
-0
lines changed

โ€Ž3sum/kut7728.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
///์ •์ˆ˜ ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,์„ธ ์ˆ˜์˜ ํ•ฉ์ด 0์ด ๋˜๋Š” ๋ชจ๋“  ์‚ผ์ค‘ ์กฐํ•ฉ [nums[i], nums[j], nums[k]]์„ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”.
2+
///i, j, k ๋ชจ๋‘ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค, ๊ฐ™์€ ์กฐํ•ฉ์˜ ๊ฒฐ๊ณผ๋Š” ํ•˜๋‚˜๋กœ ์ทจ๊ธ‰
3+
4+
class Solution {
5+
func threeSum(_ nums: [Int]) -> [[Int]] {
6+
let sorted = nums.sorted()
7+
var result = [[Int]]()
8+
9+
for i in 0..<sorted.count {
10+
// ์ค‘๋ณต ๊ฐ’ ์Šคํ‚ต
11+
if i > 0 && sorted[i] == sorted[i - 1] {
12+
continue
13+
}
14+
15+
//ํฌ์ธํ„ฐ ์„ค์ •
16+
var left = i + 1
17+
var right = sorted.count - 1
18+
19+
//๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€๋งŒ
20+
while left < right {
21+
let sum = sorted[i] + sorted[left] + sorted[right]
22+
23+
if sum == 0 {
24+
result.append([sorted[i], sorted[left], sorted[right]])
25+
26+
// ๊ฐ™์€ left/right ๊ฐ’ ์Šคํ‚ต
27+
while left < right && sorted[left] == sorted[left + 1] {
28+
left += 1
29+
}
30+
while left < right && sorted[right] == sorted[right - 1] {
31+
right -= 1
32+
}
33+
34+
left += 1
35+
right -= 1
36+
37+
} else if sum < 0 {
38+
left += 1
39+
} else {
40+
right -= 1
41+
}
42+
}
43+
}
44+
45+
return result
46+
}
47+
}

โ€Žclimbing-stairs/kut7728.swift

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution {
2+
//๊ณ„๋‹จ ๊ฐฏ์ˆ˜ n ์ž…๋ ฅ๋ฐ›์Œ
3+
func climbStairs(_ n: Int) -> Int {
4+
var result = 0
5+
6+
///1๊ณ„๋‹จ์”ฉ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒฝ์šฐ = 1์Šคํƒญ
7+
///2๊ณ„๋‹จ์”ฉ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒฝ์šฐ = 2์Šคํƒญ
8+
///2์Šคํƒญ์ธ ๊ฒฝ์šฐ๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์คŒ
9+
for i in 0...(n/2) {
10+
///2์Šคํƒญ์ด ์—†๋Š” ๊ฒฝ์šฐ -> ์ „๋ถ€ 1์Šคํƒญ์ž„
11+
if i == 0 {
12+
result += 1
13+
continue
14+
}
15+
16+
///n์—์„œ 2์Šคํƒญ ํšŸ์ˆ˜๋ฅผ ๋นผ์„œ 1์Šคํƒญ ํšŸ์ˆ˜ ๊ตฌํ•˜๊ธฐ
17+
let x = n - (2 * i)
18+
19+
///์กฐํ•ฉ๊ณ„์‚ฐ์‹ (2์Šคํƒญ,1์Šคํƒญ ์ „์ฒด ํšŸ์ˆ˜ C 2์Šคํƒญ ํšŸ์ˆ˜)
20+
result += ncm(x+i, i)
21+
}
22+
23+
return result
24+
}
25+
26+
///ncmํ•จ์ˆ˜๋กœ ์กฐํ•ฉ ๊ณ„์‚ฐ์‹์„ ๊ตฌํ˜„
27+
func ncm(_ n: Int, _ m: Int) -> Int {
28+
if m == 1 { return n } ///nC1 ์ด๋ผ๋ฉด ์ „์ฒดํšŸ์ˆ˜ n ๋ฐ˜ํ™˜
29+
if m == n { return 1 } ///nCn ์ด๋ผ๋ฉด 1๋ฐ˜ํ™˜
30+
31+
///์กฐํ•ฉ ๊ณ„์‚ฐ์‹์„ ์ฝ”๋“œ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์•„์ง
32+
return (1...m).reduce(1) { $0 * ($1 + n-m)/$1 }
33+
}
34+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
///์ •์ˆ˜๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์งˆ๋•Œ ์ •์ˆ˜๋ฐฐ์—ด answer๋ฅผ ๋ฐ˜ํ™˜ํ•˜์‹œ์˜ค
2+
///answer์˜ ๊ฐ ์š”์†Œ๋Š” nums์˜ ๊ฐ™์€ ์ธ๋ฑ์Šค์˜ ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ์˜ ๊ณฑ
3+
4+
//๋ณต์žก๋„ O(n)
5+
class Solution {
6+
func productExceptSelf(_ nums: [Int]) -> [Int] { //nums = 1,2,3,4
7+
let n = nums.count
8+
var answer = [Int](repeating: 1, count: n) //answer = 1,1,1,1
9+
var left = [Int](repeating: 1, count: n) //left = 1,1,1,1
10+
11+
let revNums = Array(nums.reversed()) //revNums = 4,3,2,1
12+
var right = [Int](repeating: 1, count: n) //right = 1,1,1,1
13+
14+
for i in 1..<n { //i = 1,2,3
15+
left[i] = left[i-1] * nums[i-1] //left = 1,1,2,6
16+
right[i] = right[i-1] * revNums[i-1] //right = 1,4,12,24
17+
}
18+
19+
for i in answer.indices {
20+
answer[i] = left[i] * right[n-i-1]
21+
}
22+
23+
return answer
24+
25+
}
26+
}

โ€Žvalid-anagram/kut7728.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//๋ฌธ์ž์—ด s, t๋ฅผ ๋ฐ›๊ณ , t๊ฐ€ s์˜ ์• ๋„ˆ๊ทธ๋žจ์ด๋ฉด true, ์•„๋‹ˆ๋ฉด false ์ถœ๋ ฅ
2+
3+
class Solution {
4+
func isAnagram(_ s: String, _ t: String) -> Bool {
5+
///๋‘˜์ด ๋ฌธ์ž ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ๋ฐ”๋กœ False
6+
if s.count != t.count { return false }
7+
8+
///ํ•ด์‰ฌํ…Œ์ด๋ธ” ์‚ฌ์šฉ
9+
var wordDic: [Character: Int] = [:]
10+
11+
///s์˜ ๊ธ€์ž๋“ค์€ 1์”ฉ ์ถ”๊ฐ€, t์˜ ๊ธ€์ž๋“ค์€ 1์”ฉ ๊ฐ์†Œ
12+
for (sChar, tChar) in zip(s, t) {
13+
wordDic[sChar, default: 0] += 1
14+
wordDic[tChar, default: 0] -= 1
15+
}
16+
17+
///๋”•์…”๋„ˆ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์ด ์ƒ์‡„๋˜์–ด 0์ด ๋˜๋ฉด true
18+
return wordDic.values.allSatisfy { $0 == 0 }
19+
}
20+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* public var val: Int
5+
* public var left: TreeNode?
6+
* public var right: TreeNode?
7+
* public init() { self.val = 0; self.left = nil; self.right = nil; }
8+
* public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
9+
* public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
10+
* self.val = val
11+
* self.left = left
12+
* self.right = right
13+
* }
14+
* }
15+
*/
16+
17+
//<๋ฌธ์ œ>
18+
///์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๊ฒƒ์ด ์œ ํšจํ•œ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(BST)์ธ์ง€ ํŒ๋‹จํ•˜์„ธ์š”.
19+
///์œ ํšจํ•œ BST๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค:
20+
///- ๋…ธ๋“œ์˜ ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋งŒ ํฌํ•จ๋˜๊ณ ,
21+
///- ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฐ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
22+
///- ๋˜ํ•œ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ๋Š” ๋ชจ๋‘ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
23+
24+
class Solution {
25+
func isValidBST(_ root: TreeNode?) -> Bool {
26+
return checkingBST(root, min: nil, max: nil)
27+
}
28+
29+
// min๊ณผ max๋Š” ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„
30+
func checkingBST(_ node: TreeNode?, min: Int?, max: Int?) -> Bool {
31+
guard let node else { return true } // nil์ด๋ฉด ์œ ํšจํ•œ ํŠธ๋ฆฌ
32+
33+
if let min = min, node.val <= min {
34+
return false
35+
}
36+
if let max = max, node.val >= max {
37+
return false
38+
}
39+
40+
// ์™ผ์ชฝ์€ max = node.val, ์˜ค๋ฅธ์ชฝ์€ min = node.val
41+
return checkingBST(node.left, min: min, max: node.val)
42+
&& checkingBST(node.right, min: node.val, max: max)
43+
}
44+
}
45+

0 commit comments

Comments
ย (0)