Skip to content

Commit 91e14ac

Browse files
authored
Merge pull request #1294 from kut7728/main
[kut7728] Week 03 solutions
2 parents fac63f6 + 0197816 commit 91e14ac

File tree

5 files changed

+127
-0
lines changed

5 files changed

+127
-0
lines changed

combination-sum/kut7728.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
///고유한 정수배열의 candidate와 목표 정수 target가 주어졌을 때,
2+
///요소들을 더해서 target을 만들수 있는 candidate의 유니크한 조합 목록을 반환합니다.
3+
///- 어떤 순서로든 조합을 반환할 수 있습니다.
4+
///- 후보에서 같은 숫자를 무제한으로 선택할 수 있습니다.
5+
///- 선택한 숫자 중 하나 이상의 빈도가 다른 경우 두 조합은 고유한 조합입니다.
6+
///- 테스트 케이스는 주어진 입력에 대해 합산되는 고유 조합의 수가 150개 미만이 되도록 생성됩니다.
7+
///Ex) candidate [2, 3, 6, 7] target = 7 -> [[2, 2, 3], [7]]
8+
9+
10+
class Solution {
11+
func combinationSum(_ candidates: [Int], _ target: Int) -> [[Int]] {
12+
result: [[Int]] = []
13+
nums: [Int] = []
14+
15+
func dfs(_ start: Int, _ total: Int) {
16+
//타겟에 적중하면 result로 복사
17+
if total == target {
18+
result.append(nums)
19+
return
20+
}
21+
22+
//합이 타겟보다 크다면 그냥 종료
23+
if total > target {
24+
return
25+
}
26+
27+
//start부터 시작하는것은 이전 요소들에 대한 조합은 이미 테스트했기 때문
28+
for i in start..<candidates.count {
29+
nums.append(candidates[i])
30+
dfs(i, total + candidates[i])
31+
nums.removeLast()
32+
}
33+
}
34+
35+
dfs(0, 0)
36+
return result
37+
}
38+
}

decode-ways/kut7728.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
///정수 문자열 암호문을 습득했고, 1 -> A, 2 -> B ... 25 -> Y, 26 -> Z 이런식으로 해독됨
2+
///정수 문자열을 어떻게 끊느냐에 따라 해독이 다르게 된다는 점을 고려해서
3+
///해독 될수 있는 모든 경우의 수를 반환하라, 해독이 안된다면 0을 반환하라
4+
///
5+
///EX) s = "12"
6+
///output : 2 -> (1 2) "AB" or (12) "L"
7+
8+
9+
class Solution {
10+
func numDecodings(_ s: String) -> Int {
11+
let arr = Array(s)
12+
var memo: [Int:Int] = [arr.count:1]
13+
14+
func dfs(_ start: Int) -> Int {
15+
if let result = memo[start] {
16+
return result
17+
}
18+
19+
20+
if arr[start] == "0" {
21+
memo[start] = 0
22+
} else if start + 1 < arr.count, Int(String(arr[start...start+1]))! <= 26 {
23+
memo[start] = dfs(start+1) + dfs(start+2)
24+
} else {
25+
memo[start] = dfs(start + 1)
26+
}
27+
28+
return memo[start]!
29+
}
30+
31+
return dfs(0)
32+
}
33+
}

maximum-subarray/kut7728.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
///53. Maximum Subarray
2+
///정수 배열 Nums가 주어질때, subarray들 중에서 가장 합이 큰걸 구하고 그 합을 반환하라
3+
///subarray: 비지 않은 연속된 요소들의 배열
4+
5+
6+
class Solution {
7+
func maxSubArray(_ nums: [Int]) -> Int {
8+
guard !nums.isEmpty else { return 0 }
9+
10+
var currentSum = nums[0]
11+
var maxSum = nums[0]
12+
13+
for num in nums.dropFirst() {
14+
currentSum = max(num, currentSum + num)
15+
maxSum = max(maxSum, currentSum)
16+
}
17+
18+
return maxSum
19+
}
20+
}

number-of-1-bits/kut7728.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
///양의 정수 n이 주어졌을 때,
2+
///이진 표현으로 setbit의 수를 반환하는 함수(해밍 가중치라고도 함)를 작성합니다.
3+
///setbit이란 이진수 중에서 1의 값을 가지는 비트의 갯수
4+
5+
class Solution {
6+
func hammingWeight(_ n: Int) -> Int {
7+
let count = String(n, radix: 2).filter { $0 == "1" }.count
8+
return count
9+
}
10+
}

valid-palindrome/kut7728.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
///주어진 문자열에서 문자, 숫자가 아닌 경우를 지우고, 모두 소문자로 바꿨을때
2+
///앞, 뒤에서 읽었을 때 동일한 경우를 palindrome이라고 부름
3+
///문자열 s가 주어질때 palindrome이면 true, 아니면 False 리턴하시오
4+
5+
class Solution {
6+
func isPalindrome(_ s: String) -> Bool {
7+
let alpList = Set("abcdefghijklmnopqrstuvwxyz0123456789")
8+
9+
if s == " " { return true } // 공백인 경우 바로 true
10+
11+
var pureString = s.lowercased().filter { alpList.contains($0) }
12+
13+
14+
let reverseString = String(pureString.reversed())
15+
16+
if pureString == reverseString { return true } else { return false }
17+
18+
}
19+
20+
//.isLetter, .isNumber이라는 끝내주는 메서드가 있었다...
21+
func isPalindrome2(_ s: String) -> Bool {
22+
let s = s.lowercased().filter { $0.isLetter || $0.isNumber }
23+
return s == String(s.reversed())
24+
}
25+
26+
}

0 commit comments

Comments
 (0)