기록하는 개발자

[프로그래머스][코딩테스트 고득점 Kit][Javascript] 피로도 본문

Algorithm

[프로그래머스][코딩테스트 고득점 Kit][Javascript] 피로도

밍맹030 2023. 8. 7. 18:10
728x90

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

 

프로그래머스

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

programmers.co.kr

function solution(k, dungeons) {
    let answer = 0;
    // 주어지는 배열(dungeons) 크기와 같은 크기의 배열 선언 및 false로 초기화
    const visited = Array.from({ length: dungeons.length }, () => false);
    
    // k : 현재 피로도
    // count : 방문한 던전 수
    function dfs(k, count){
        for(let i=0; i<dungeons.length; i++){
            // 방문하지 않은 던전이고
            // 현재 피로도(k)가 최소 필요 피로도 이상이면
            // 던전 방문 가능
            if(visited[i] == false && k >= dungeons[i][0]){
                // 방문 표시
                visited[i]=true;
                // 갱신된 현재 피로도 = 이전피로도 - 소모 피로도
                dfs(k-dungeons[i][1], count+1);
                // 백트래킹을 위해 방문 여부 초기화
                visited[i]=false;  
            }
        }
        // dfs 완료 후 방문한 총 던전 수와 현재 answer 중 더 작은 값으로 answer 갱신
        answer = Math.max(answer, count);
    }
    dfs(k ,0);
    return answer;
}
728x90