프로그래머스 LV2. 피로도
✅ 프로그래머스 LV2. 피로도
나 이제 재귀를 조금 잘쓰는 것 같다.
물론 완전 탐색에서의 재귀이지만, dfs, bfs 등도 잘 풀 수 있어야 하니 꾸준히 노력하자
갑자기 적는거지만 알고리즘 왜 푸냐면 개인적으로 앱 개발에 있어서 어떠한 알고리즘이라 로직 처리를 할 때 매우 약하다. 그런 점을 보완하고자 알고리즘을 공부한다.
import Foundation
struct p87946 {
static func run() {
print(p87946.solution(80, [[80,20],[50,40],[30,10]])) // 3
}
static var count = 0
static var results: Set<[[Int]]> = []
static func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
// 정렬이 먼저겠다. 정렬 1순위 : 사용 피로도, 정렬 2순위 : 최소 피로도
// 던점 최대 8개면 그냥 배열 갖고 완전탐색 해도 괜찮을 듯
reculsive(list: [], remain: dungeons, len: dungeons.count)
// print("result -> \(results)")
for result in results {
var k = k
var tempCount = 0
for item in result {
// print("\(item[0]) || \(k)")
if item[0] <= k {
k -= item[1]
tempCount += 1
// print("ad \(tempCount)")
}
}
count = max(count, tempCount)
if count == dungeons.count { break }
}
return count
}
static func reculsive(list: [[Int]], remain: [[Int]], len: Int) {
if list.count == len {
// print("🎃 \(list)")
results.insert(list)
return
}
for i in 0..<remain.count {
var list = list
list.append(remain[i])
var arr = remain
arr.remove(at: i)
reculsive(list: list, remain: arr, len: len)
}
}
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[Swift] 프로그래머스 LV. 2 N개의 최소공배수 (0) | 2022.04.01 |
---|---|
[Swift] 프로그래머스 LV2. 삼각 달팽이 (0) | 2022.04.01 |
[Swift] 프로그래머스 LV2. 소수 찾기 (0) | 2022.04.01 |
[Swift] BOJ 11726 2 x n 타일링 (0) | 2022.04.01 |
[Swift] BOJ 10610번 30 (0) | 2022.03.22 |