공부/코딩테스트

[프로그래머스 C++] 피로도

굥굔 2023. 4. 4. 09:43

< 해설 >

아니 테스트케이스는 틀렸는데 정확성 테스트는 다 맞음... 왜일까...? vs로 확인해보려고 함.

암튼 이것도 풀긴했어서 올림

 

저번 문제와 동일하게 while 문 안에서 next_permutation 함수를 이용했다. next_permutation 를 이용해서 벡터의 인자들을 섞어주고 for문을 돌면서 차례대로 몇개의 던전을 갈 수 있는지 확인한다.

무지성 코딩이 답일때도 있지만 시간초과로 걸릴까봐 중간에 피로도가 0이면 for문에서 벗어나도록 조건도 체크해줬다.

그리고 지날 수 있는 던전의 개수가 이 전 던전탐색 최대 개수보다 크면 갱신해주는 식으로 풀었다.

 

< 문제 >

 

< 풀이 >

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int k, vector<vector<int>> dungeons) {
    int answer = 0;
    int Fatigue;
    
     while (true)
    {
         int dungeonCount = 0;
         Fatigue = k;
         
         for(int i=0; i< dungeons.size(); i++)
         {
             if(dungeons[i][0] <= Fatigue)
             {
                 dungeonCount++;
                 Fatigue -= dungeons[i][1];
             }
             if(Fatigue == 0)
                 break;
         }
               
         if(answer < dungeonCount)
             answer = dungeonCount;

        if (!(next_permutation(dungeons.begin(), dungeons.end())))
            break;
    }
    
    return answer;
}