본문 바로가기
JAVA

프로그래머스 피로도

by Son 2022. 11. 26.

https://campus.programmers.co.kr/courses/15436/lessons/132833

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    private int answer = 0; //유저가 탐험할 최대 던전의 개수를담는 배열
    private boolean[] visit;  //dfs
    public int solution(int k, int[][] dungeons) {  //피로도 dungenon배열
        visit = new boolean[dungeons.length];  //던전 탐험 여부 = 던전의 개수와 같다
        
        dfs(0, k, dungeons); //0은 depth, k 는 현재 피로도
        
        return answer;
    }
    
    private void dfs(int depth, int k, int[][]dungeons){
        for(int i = 0; i<dungeons.length; i++){
            if(!visit[i]&& dungeons[i][0]<=k){  //던전을 돌지 않았거나 던전 도전을 위한 최대 피로도 조건을 충족(dungeons[i][0]<=k)
                visit[i] = true;
                dfs(depth+1, k-dungeons[i][1], dungeons); //던전을 돈 후 던전을 돈회수증가+ 소모피로도 계산
                visit[i] = false;
            }
        }
        answer = Math.max(answer, depth);
    }
}

 dfs를 사용한다