728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/87946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해설
각 던전을 확인하는데 소모 피로도와 현재 피로도의 차이, 최소 필요 피로도 2가지를 비교해야하기 때문에 완전탐색으로 모두 확인해보아야 합니다.
따라서 완전 탐색 중 dfs를 이용해서 해결했습니다.
방문여부를 확인할 배열 visited[], 가장 많이 돈 던전 수를 확인할 answer를 외부에 저장해 줍니다.
이후 dfs를 구성해 줍니다.
public void dfs(int count, int k, int[][] dungeons){
answer = Math.max(count,answer);
for(int i=0;i<dungeons.length;i++){
if(visited[i] || dungeons[i][0] > k) continue;
visited[i] = true;
dfs(count + 1, k - dungeons[i][1], dungeons);
visited[i] = false;
}
}
count는 던전을 돈 횟수이기 때문에 각 시작마다 answer와 비교해줍니다.
이미 방문한 던전이거나 최소필요피로도를 비교해 dfs를 더 들어가지 못하도록 합니다.
코드
class Solution {
int answer = 0;
boolean[] visited;
public int solution(int k, int[][] dungeons) {
visited = new boolean[dungeons.length];
dfs(0,k,dungeons);
return answer;
}
public void dfs(int count, int k, int[][] dungeons){
answer = Math.max(count,answer);
for(int i=0;i<dungeons.length;i++){
if(visited[i] || dungeons[i][0] > k) continue;
visited[i] = true;
dfs(count + 1, k - dungeons[i][1], dungeons);
visited[i] = false;
}
}
}
728x90
'[IT] 코딩테스트 > [문제 및 풀이] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 요격 시스템 / 자바(Java) (2) | 2023.10.18 |
---|---|
[프로그래머스] 광물 캐기 / 자바(Java) (0) | 2023.10.17 |
[프로그래머스] 할인 행사 / 자바(Java) (0) | 2023.09.06 |
[프로그래머스] 연속 부분 수열 합의 개수 / 자바(Java) (0) | 2023.09.05 |
[프로그래머스] 귤 고르기 / 자바(Java) (0) | 2023.09.04 |