Judge

Programmers - 피로도

깡구_ 2022. 6. 25. 22:54

title: Programmers - 피로도
date: 2022-06-25
tags:

  • Algorithm
  • DFS




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


문제 요약

현재 피로도, 그리고 던전에 들어가기 위한 최소 피로도와 소모 피로도가 주어진다. 유저가 탐험할 수 있는 최대 던전 수를 구하여 return한다.


문제 풀이

던전의 개수는 8개밖에 존재하지 않으며, 순서에 영향을 받으므로 DFS가 적합하다고 판단하였다.
DFS 함수의 최대 호출 횟수는 8! + 1(처음 진입시 1회) = 약 40k이다.
조건이 까다롭지 않으므로 .data 함수 없이 vector에 직접 접근하여도 문제가 없을 것 같다.


프로그램

#include <vector>
#include <algorithm>

using std :: vector ;

int iDungeonSize ;
bool brgUsed [ 8 ] ;
vector < int > * vpTemp ;

int iDFS ( int iCurrentTiredness )
{
    int iAnswer = 0 ;

    for ( int i = 0 ; i < iDungeonSize ; ++i )
    {
        if ( ( ! brgUsed [ i ] ) && ( vpTemp [ i ] [ 0 ] <= iCurrentTiredness ) )
        {
            brgUsed [ i ] = true ;
            iAnswer = std :: max ( iAnswer , iDFS ( iCurrentTiredness - vpTemp [ i ] [ 1 ] ) + 1 ) ;
            brgUsed [ i ] = false ;
        }
    }

    return iAnswer ;
}

int solution ( int k , vector < vector < int > > dungeons )
{
    int answer = -1 ;
    vpTemp = dungeons.data () ;
    iDungeonSize = dungeons.size () ;
    std :: fill ( brgUsed , brgUsed + iDungeonSize , false ) ;



    return iDFS ( k ) ;
}