Backtracking
개념
유망 함수
문제 1. 피로도
설명
제약 조건
입출력의 예
k
dungeons
result
코드
문제 2. N-퀸
설명
제약 조건
입출력의 예
n
result
코드
참고
Last updated

Last updated
fun main() {
fun solution(k: Int, daungeons: Array<IntArray>): Int {
var result = 0
fun visitDaungeon(fatigue: Int, daungeonInfo: IntArray, daungeonIndex: Int, count: Int, visit: IntArray) {
val visited = visit.clone()
// 1.1.1 현재 피로도로 현재 방문한 던전을 돌 수 있는지 확인한 후 돌지 못 할 경우 함수를 종료한다.
if (fatigue < daungeonInfo[0]) {
return
}
// 1.1.2 현재 던전을 방문 여부에 넣는다.
visited[daungeonIndex] = 1
// 1.1.3 결과에 1을 더한다.
val visitedCount = count + 1
// 1.1.4 현재 피로도에서 던전의 소요 피로도를 뺀다.
val spentFatigue = fatigue - daungeonInfo[1]
// 1.1.5 던전들에서 아직 방문하지 않은 던전을 찾아서 돈다.
for (i in daungeons.indices) {
if (visited[i] == 1) continue
visitDaungeon(spentFatigue, daungeons[i], i, visitedCount, visited)
}
// 1.1.6 방문하지 않은 던전이 없을 경우 현재 방문 횟수가 결과 횟수보다 크면 결과 횟수를 변경한다.
if (result < visitedCount) {
result = visitedCount
}
// 1.1.7 함수를 종료한다.
return
}
// 1. 각 던전을 순회한다.
for (i in daungeons.indices) {
// 1.1. 재귀 함수 호출
visitDaungeon(k, daungeons[i], i, 0, IntArray(daungeons.size))
}
return result
}
val k = 80
val daungeons = arrayOf(intArrayOf(80, 20), intArrayOf(50, 40), intArrayOf(30, 10))
println(solution(k, daungeons))
}