[프로그래머스] 피로도 in Kotlin

ddanglehee·2022년 8월 11일
0

코딩테스트 준비

목록 보기
7/18
post-thumbnail

📜 문제

문제 링크

💡 나의 풀이

   완전 탐색으로 풀게 되면 던전의 개수를 N이라고 할 때, 던전을 방문하는 순서의 모든 경우의 수 N!만큼 계산을 해야한다. -> O(N!)
  그런데 문제에서 가능한 던전의 최대 개수는 8개이기 때문에 아무리 느려도 O(8!)만큼의 시간복잡도밖에 나오지 않기 때문에 완전 탐색으로 풀어도 되는 문제다!
  나는 dfs를 이용해서 완전탐색해서 풀었다!

⌨️ 코드

class Solution {

    private val visited = BooleanArray(8)
    private var count = 0
    private var answer = 0

    fun solution(k: Int, dungeons: Array<IntArray>): Int {
        for (i in dungeons.indices) {
            dfs(k, i, dungeons)
        }
        return answer
    }

    private fun dfs(k: Int, current:Int, dungeons: Array<IntArray>) {
        visited[current] = true
        count++

        if (answer < count) {
            answer = count
        }

        for (i in dungeons.indices) {
            val newK = k - dungeons[current][1]
            // 방문한 적이 없는 던전이고, 현재 피로도가 던전의 최소 필요 피로도 이상이어야만 간다.
            if (!visited[i] && (dungeons[i][0] <= newK)) {
                dfs(newK, i, dungeons)
            }
        }

        visited[current] = false
        count--
    }
}

😄 느낀 점

언제쯤 한번에 컴파일 오류 없이 제출할 수 있을까~!?

profile
잊고싶지 않은 것들을 기록해요✏️

2개의 댓글

comment-user-thumbnail
2022년 8월 11일

코드가 깔끔해요

1개의 답글