https://school.programmers.co.kr/learn/courses/30/lessons/87946
보자마자 dfs 가 떠오른 문제다.
신경써야할 부분은 입장에 필요한 최소 피로도와 소모 피로도를 dfs 를 돌때
계속 업데이트 해주면서 방문체크와 함께 해주면 된다.
그리고 여러 순서로 던전을 방문하는걸 다 체크 해봐야하기 때문에
방문을 한 뒤에 로직이 끝날때는 방문처리를 해제해주자.
class Solution {
var visited = booleanArrayOf()
var answer: Int = -1
lateinit var dungeon : Array<IntArray>
fun solution(k: Int, dungeons: Array<IntArray>): Int {
visited = BooleanArray(dungeons.size)
dungeon = dungeons
for(i in 0 until dungeons.size){
if(!visited[i] && k >= dungeon[i][0]){
dfs(k -dungeon[i][1] ,i , 1)
}
visited[i] = false
}
return answer
}
fun dfs( current : Int, v : Int , count : Int){
visited[v] = true
answer = maxOf(answer , count)
for(i in 0 until dungeon.size){
if(!visited[i] && current >= dungeon[i][0]){
dfs(current - dungeon[i][1] , i , count+1 )
}
}
visited[v] = false
}
}
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 - 인사고과 (0) | 2024.08.28 |
---|---|
프로그래머스 - 연속 펄스 부분 수열의 합 (3) | 2024.08.28 |
프로그래머스 - 모음사전 (0) | 2024.08.28 |
프로그래머스 - 할인 행사 (0) | 2024.08.27 |
프로그래머스 - 숫자 짝꿍 (0) | 2024.08.27 |
프로그래머스 - 혼자 놀기의 달인 (0) | 2024.08.26 |
프로그래머스 - 연속 부분 수열 합의 개수 (0) | 2024.08.26 |
프로그래머스 - 택배상자 (0) | 2024.08.25 |