[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방식을 고민하고 생각했다는 점이 뿌듯했고 다른 사람들의 풀이를 보고 또 배운점이 있어서 다음에도 써먹어 보고싶다.
'자바 > 프로그래머스' 카테고리의 다른 글
[Programmers/JAVA] 타겟 넘버 (0) | 2023.03.22 |
---|---|
[Programmers/JAVA] 약수의 합 (0) | 2023.03.21 |
[Programmers/JAVA] 다리를 지나는 트럭 (0) | 2023.03.04 |
[Programmers/JAVA] 주식가격 (0) | 2023.02.28 |
[Programmers/JAVA] k진수에서 소수 개수 구하기 (0) | 2023.02.24 |