[프로그래머스 LV2] 피로도

Junyoung Park·2022년 8월 10일
0

코딩테스트

목록 보기
539/631
post-thumbnail

1. 문제 설명

피로도

2. 문제 분석

던전을 도는 순서에 따라서 최대 방문 횟수가 달라지기 때문에 DFS를 통해 순열을 돌면서 현재 피로도를 기반으로 방문 횟수를 카운트한다. 최댓값을 기록해 리턴.

3. 나의 풀이

import Foundation

var total = 0
var checked = [Bool]()

func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
    checked = Array(repeating: false, count: dungeons.count)
    DFS(k, 0, dungeons, [])
    return total
}

func DFS(_ curK: Int, _ curCount: Int, _ dungeons: [[Int]], _ curRoute: [Int]) {
    if curK >= 0 {
        total = max(total, curCount)
    }
    
    for idx in 0..<dungeons.count {
        if !checked[idx] && curK >= dungeons[idx][0] {
            checked[idx] = true
            DFS(curK - dungeons[idx][1], curCount + 1, dungeons, curRoute + [idx])
            checked[idx] = false
        }
    }
}
profile
JUST DO IT

0개의 댓글