코딩테스트-알고리즘/프로그래머스

[프로그래머스/Lv.2] 피로도

닉네임생각즁 2024. 1. 14. 07:35

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

프로그래머스

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

programmers.co.kr

 

class Solution {
    boolean[] visited;
    int answer = -1;
    
    public int solution(int k, int[][] dungeons) {
    
        
        visited = new boolean[dungeons.length];
        adventure(k, dungeons, 0);   
        
        return answer;
    }
    
    void adventure (int k, int[][] dungeons, int count) {
        
        for(int i=0; i<dungeons.length; i++) {
            if(!visited[i] && k >= dungeons[i][0]) {
                visited[i] = true;
                adventure(k - dungeons[i][1], dungeons, count+1);
                visited[i] = false;
            } 
        }
        
        if (count > answer) {
            answer = count;
        }
        
    }
}

 

드디어 풀었다

정말 쉽지 않았다 dfs 알고리즘은 이해했지만 이걸 코드로 구현한다는게 익숙하지 않았고, dfs 틀을 일단 외워서 써봐야한다는 친구들 조언에도 그냥 무작정 외워서 쓴다는게 받아들여지지않아서 내가 완전 이해하고 완성할때까지 정말정말 오래시간을 썼다,,🤧 물론 아직 완전 이해한건 아니지만 많이 깨달았다

이 과정이 너무 답답하긴했는데 이해가 됐다는 사실이 너무 기쁘다 비슷한 유형을 다음에 만났을때는 지금보다 낫겠지

 

 

count와 answer을 비교해주는 코드는 Math.maxIO를 사용하여 더 간단하게도 가능할 듯 하다