1. 완전탐색을 이용해서 배열에 (0,1,2),(0,2,1)....(2,1,0) 까지를 모두 넣고
2. 반복문으로 해당 값들을 돌면서 k를 소모시키면서 최소 필요 피로도 보다 k 가 큰지 확인을 하자.
3. 그렇게 모든 경우를 돌았을때 가질 수 있는 가장 큰 경우를 반환하자.
[회고]
C++로 풀때는 어렵지 않았는데 Swift로 풀려니 벡터와 배열의 차이로 순간 헷갈렸다.
배열에 바로 값을 넣고 싶을땐 Array(repeating , count)를 사용하고 배열을 벡터처럼 초기값을 비워두고 사용할땐 그냥 [Int]()를 이용하자. 생각보다 벡터와 비슷하니 안 헷갈릴 거다.
[코드]
import Foundation
var vec = [Int]()
var visited = Array(repeating: 0, count: 12)
var answer: Int = 0
var num: Int = 0
func backTrack(_ dungeons:[[Int]]){
if vec.count == dungeons.count {
var k = num
var count = 0
for i in vec {
if k >= dungeons[i][0] {
k = k - dungeons[i][1]
count += 1
}
}
answer = max(answer, count)
}
for i in 0..<dungeons.count {
if(visited[i] == 0){
visited[i] = 1
vec.append(i)
backTrack(dungeons)
vec.removeLast()
visited[i] = 0
}
}
}
func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
num = k
backTrack(dungeons)
return answer
}