문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/87946
[ 요약 ]
더보기
시작 시간 : .
종료 시간 : .
소요 시간(분) : .
도전 횟수 (제출 횟수) : .
로직 및 풀이 참고 여부 : O
[ 풀어보기 ]
풀이
📌 로직
- 여러가지를 고려해보았으나 다 실패했다.
- 최소 필요 피로도가 높은 것부터 통과하기
- 소모 피로도가 낮은 것 부터 통과하기
- 최소 필요 피로도 - 소모 피로도의 값을 구한 후, 값이 큰 것부터 통과하기
- 그러니.. 완전 탐색을 활용하는 수 밖에 없다. (문제 분류가 완전탐색인 이유가 있었다...)
- 방문 여부를 체크하는 boolean 배열변수 visited를 전역변수로 선언
- 방문할 수 있는 던전의 최대 개수를 담을 변수 int max를 전역변수로 선언
- dungeons의 처음부터 끝까지 순회하는 for문을 생성한다.
- 현재 방문한 던전의 위치에 해당하는 visitied를 true로 초기화,
현재 체력에서 소모 피로도만큼 빼기.
방문한 던전의 개수를 +1 - 다음으로 들릴 던전을 찾기 위해 dungeons 배열의 0부터 끝까지 탐색하는 for문 다시 생성.
- 만약 visited가 false이고, 현재 체력보다 최소 필요 피로도가 낮은 던전이 있다면, 위 과정 반복
- 한 루트를 다 탐색한 후, 해당 루트의 던전 방문 개수가 max보다 더 크다면
그 값을 max로 갱신하기
- 참고
📌 코드
// 피로도고 뭐고 내가 잠온다...
import java.util.*;
class Solution {
boolean[] visited;
int[][] dungeons;
int max;
public int solution(int k, int[][] dungeons) {
int answer = 0;
this.dungeons = dungeons;
visited = new boolean[dungeons.length];
for(int i=0; i<dungeons.length; i++) {
if(k>=dungeons[i][0]) dfs(i, k, 1);
}
return max;
}
private void dfs(int current, int tired, int depth) {
// current 현재 탐색하는 위치
// tired 현재 피로도
// depth 현재 깊이
visited[current] = true;
tired -= dungeons[current][1];
for(int i=0; i<dungeons.length; i++) {
if(!visited[i] && dungeons[i][0] <= tired)
dfs(i, tired, depth+1);
}
max = Math.max(max, depth);
visited[current] = false;
}
}
📌 채점 결과
정확성 테스트
테스트 1 〉 통과 (0.05ms, 74.3MB)
테스트 2 〉 통과 (0.04ms, 76.3MB)
테스트 3 〉 통과 (0.04ms, 71.7MB)
테스트 4 〉 통과 (0.17ms, 83.2MB)
테스트 5 〉 통과 (0.33ms, 76.9MB)
테스트 6 〉 통과 (0.83ms, 76.5MB)
테스트 7 〉 통과 (2.00ms, 75.3MB)
테스트 8 〉 통과 (2.91ms, 80.5MB)
테스트 9 〉 통과 (0.05ms, 71.4MB)
테스트 10 〉 통과 (0.44ms, 70.9MB)
테스트 11 〉 통과 (0.05ms, 79.7MB)
테스트 12 〉 통과 (0.54ms, 73.7MB)
테스트 13 〉 통과 (0.13ms, 73.6MB)
테스트 14 〉 통과 (0.12ms, 78.3MB)
테스트 15 〉 통과 (0.04ms, 74.3MB)
테스트 16 〉 통과 (0.05ms, 77.4MB)
테스트 17 〉 통과 (0.06ms, 77.4MB)
테스트 18 〉 통과 (0.04ms, 76MB)
테스트 19 〉 통과 (0.10ms, 74.2MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
[배운 점]
📌 배운 것
- 깊이 우선 탐색 DFS의 개념
- 배운점 2
- 설명2
'코딩테스트 - 프로그래머스 > JAVA' 카테고리의 다른 글
[프로그래머스 / 해시 / 자바(JAVA)] 전화번호 목록 (0) | 2024.05.09 |
---|---|
[프로그래머스 / 2018 KAKAO BLIND RECRUITMENT / 자바(JAVA)] [1차] 뉴스 클러스터링 (0) | 2024.05.06 |
[프로그래머스 / 스택/큐 / 자바(JAVA)] 프로세스 (0) | 2024.04.24 |
[프로그래머스 / 2019 카카오 개발자 겨울 인턴십 / 자바(JAVA)] 튜플 (0) | 2024.04.23 |
[프로그래머스 / 스택/큐 / 자바(JAVA)] 기능 개발 (0) | 2024.04.22 |