그럴듯한 개발 블로그
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/87946?language=cpp 

 

프로그래머스

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

programmers.co.kr

dfs가 바로 떠올랐다. 하지만 완전탐색으로 분류된 문제인 만큼 완전탐색으로 풀고 싶었다.

순열을 순회할 수 있는 next_permutation함수를 사용하여 해결했다. 

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

using namespace std;

int get_explore_cnt(vector<int> v, vector<vector<int>> dungeons, int k)
{
    int cnt = 0;
    
    for (int i = 0; i < v.size(); i++)
    {
        if (k >= dungeons[v[i]][0])
        {
            cnt++;
            k -= dungeons[v[i]][1];
        }
    }
    return (cnt);
}

int solution(int k, vector<vector<int>> dungeons) {
    int answer = -1, i = 0;
    
    vector<int> v(dungeons.size());
    
    for (int i = 0; i < v.size(); i++)
        v[i] = i; // 오름차순 순열 만들어줌
    while (1)
    {
        answer = max(answer, get_explore_cnt(v, dungeons, k));
        if (!next_permutation(v.begin(), v.end())) // 다음 순열이 있으면 바꿔주고 없으면 break
            break ;
    }
    return answer;
}
반응형
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!