-
[프로그래머스][Kotlin] 피로도프로그래머스 2023. 3. 12. 05:57728x90
해당 문제의 경우 저는 dfs를 이용하여 모든 경우의 수를 확인하여 결과 값을 확인하였습니다.
처음에는 dfs비슷하게 코드를 작성하였었으나, 통과 후 다른 사람들의 코드를 살짝 봤는데 훨씬 간결하게 풀 수 있는 것을 보게 되었습니다. 그리고 제가 작성한 코드와 차이가 나는 이유를 곰곰히 생각해 보니 해당 문제의 태그는 완전탐색으로 되어있는 점과 dungeons의 꽂혀 체력에 관하여 생각을 미처 못했던 이유 였습니다.
그래서 바로 포커스를 바꿔 체력에 맞춰서 작성 하였더니 실행시간이 대폭 감소 하는 것을 확인 할 수 있었습니다.
앞으로는 특정자료 및 특정 방법에만 꽂혀서 더욱 원활한 방법을 생각 못하는 것을 주의하며 코드를 작성해야겠다는 생각을 하게 되는 문제였습니다.
하기는 제가 처음 작성한 코드(dungeons 꽂힌 코드)와 실행 결과 입니다.
import java.lang.Math.max class Solution { lateinit var visit : BooleanArray var answer: Int = -1 lateinit var dungeon : Array<IntArray> fun solution(k: Int, dungeons: Array<IntArray>): Int { visit = BooleanArray(dungeons.size){true} dungeon = dungeons for(i in 0 .. dungeons.size-1){ var temp = ArrayList<Int>() temp.add(i) dfs(k,temp,i) visit[i] = true } return answer } fun dfs(hp:Int, oner:ArrayList<Int>,now:Int){ visit[now] = false var temp1 = ArrayList<Int>() for(i in oner){ temp1.add(i) } if(temp1.size == dungeon.size){ var point = hp var count = 0 for(i in 0 .. dungeon.size-1){ val clear = temp1[i] if(point >= dungeon[clear][0]){ point -= dungeon[clear][1] count++ } else { break } } answer = max(answer,count) return } for(i in 0 .. dungeon.size-1){ if(visit[i]){ temp1.add(i) dfs(hp,temp1,i) visit[i] = true temp1.removeLast() } } } }
실행 결과
테스트 1 〉 통과 (5.18ms, 61.8MB) 테스트 2 〉 통과 (5.10ms, 61.3MB) 테스트 3 〉 통과 (6.38ms, 61.9MB) 테스트 4 〉 통과 (5.97ms, 61MB) 테스트 5 〉 통과 (8.68ms, 69.6MB) 테스트 6 〉 통과 (14.94ms, 67.8MB) 테스트 7 〉 통과 (57.30ms, 80.1MB) 테스트 8 〉 통과 (55.90ms, 80.2MB) 테스트 9 〉 통과 (6.28ms, 62MB) 테스트 10 〉 통과 (15.28ms, 67.6MB) 테스트 11 〉 통과 (5.33ms, 60.5MB) 테스트 12 〉 통과 (52.22ms, 79.5MB) 테스트 13 〉 통과 (50.95ms, 79.9MB) 테스트 14 〉 통과 (50.49ms, 79.8MB) 테스트 15 〉 통과 (49.24ms, 80.2MB) 테스트 16 〉 통과 (14.49ms, 69.8MB) 테스트 17 〉 통과 (50.75ms, 78.9MB) 테스트 18 〉 통과 (5.16ms, 62.9MB) 테스트 19 〉 통과 (5.83ms, 61.2MB) 하기 코드는 다른 사람들의 코드를 보고 체력에 포커스를 맞춰 작성한 코드 및 실행 결과 입니다.
import java.lang.Math.max class Solution { lateinit var visit : BooleanArray var answer: Int = -1 lateinit var dungeon : Array<IntArray> fun solution(k: Int, dungeons: Array<IntArray>): Int { visit = BooleanArray(dungeons.size){true} dungeon = dungeons for(i in 0 .. dungeons.size-1){ if(visit[i] && k-dungeon[i][0] >= 0){ dfs(k-dungeon[i][1],i,1) } visit[i] = true } return answer } fun dfs(hp:Int,now:Int,count:Int){ visit[now] = false answer = max(answer,count) for(i in 0 .. dungeon.size-1){ if(visit[i] && hp-dungeon[i][0] >= 0){ dfs(hp-dungeon[i][1],i,count+1) } } visit[now] = true } }
실행 결과
테스트 1 〉 통과 (0.06ms, 61.2MB) 테스트 2 〉 통과 (0.06ms, 61.4MB) 테스트 3 〉 통과 (0.05ms, 62.5MB) 테스트 4 〉 통과 (0.33ms, 60.4MB) 테스트 5 〉 통과 (0.73ms, 61.3MB) 테스트 6 〉 통과 (1.77ms, 60MB) 테스트 7 〉 통과 (3.40ms, 60MB) 테스트 8 〉 통과 (4.85ms, 60.7MB) 테스트 9 〉 통과 (0.05ms, 61.8MB) 테스트 10 〉 통과 (0.96ms, 61.9MB) 테스트 11 〉 통과 (0.03ms, 62.1MB) 테스트 12 〉 통과 (1.42ms, 62.8MB) 테스트 13 〉 통과 (0.47ms, 61.1MB) 테스트 14 〉 통과 (0.21ms, 60.9MB) 테스트 15 〉 통과 (0.09ms, 61.1MB) 테스트 16 〉 통과 (0.09ms, 61.5MB) 테스트 17 〉 통과 (0.17ms, 60.9MB) 테스트 18 〉 통과 (0.04ms, 60MB) 테스트 19 〉 통과 (0.13ms, 61.4MB) '프로그래머스' 카테고리의 다른 글
[프로그래머스][Kotlin] 모음 사전 (0) 2023.03.19 [프로그래머스][Kotlin] 여행 경로 (0) 2023.03.15 [프로그래머스][Kotlin] 부대복귀 (0) 2023.03.09 [프로그래머스][Kotlin] 무인도 여행 (0) 2023.03.07 [프로그래머스][Koltin] 미로 탈출 (0) 2023.03.06