[Programmers/JAVA] 피로도

2023. 3. 23. 23:01자바/프로그래머스

 

내 코드

import java.util.*;
class Solution {
	static List<Integer> list=new ArrayList<>();
    
    public int solution(int k, int[][] dungeons) {
        int answer = -1;
        
        dfs(dungeons, k, 0, ""); 
        Collections.sort(list, Collections.reverseOrder()); //값이 높은 순서대로
        answer=list.get(0);
        
        return answer;
    }
    
    public static void dfs(int[][] dungeons, int k, int count, String visit) {

        for(int i=0; i<dungeons.length; i++) {
            //방문한 노드인지 확인 + 피로도가 괜찮은지 확인
            if(visit.indexOf(Integer.toString(i))==-1 && k>=dungeons[i][0]) {
                dfs(dungeons, k-dungeons[i][1], count+1, visit+i);
            }
        }
        list.add(count);
    }
}

 

 

느낀점

어제 문제를 풀면서 재귀함수와 DFS를 활용한 문제를 한번 더 풀어보고 싶다고 생각했는데 다음 문제로 바로 나왔다.

DFS를 활용하면 될 것 같고, 재귀함수를 활용하면 될 거같다고는 생각했는데 재귀함수를 생각하는 과정에서 계속 미궁으로 빠졌다... return값은 어떻게 해야하는거지..? 멘붕...

다른 사람이 푼 답을 조금 참고하여 풀었다. 나는 방문을 했는지 안했는지를 확인하기 위해서 visit이라는 String 문자열에 i를 더해줬다. String에 int를 더하면 그대로 String이 되니 그 문자열에서 i값을 찾으면 될 것이라 생각했다. 이는 던전이 8개 이하이기 때문에 가능했다. 다른 사람 풀이를 보니 boolean값을 true줬다가 false줬다가 하던데 그것도 좋은 방법인 것 같다.

그리고 나는 list에 count값을 계속 더해줬는데 다른 사람 풀이를 보니 필드를 가져와서 값을 비교하더라! 그것도 참 깔끔하고 좋은 코드 같았다.

내 힘으로 재귀함수와 dfs방식을 고민하고 생각했다는 점이 뿌듯했고 다른 사람들의 풀이를 보고 또 배운점이 있어서 다음에도 써먹어 보고싶다.