반응형
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;
}
반응형
'<algorithm> > 프로그래머스_고득점 kit' 카테고리의 다른 글
[프로그래머스 고득점kit] 완전탐색_전력망을 둘로 나누기 c++ (set) (0) | 2023.08.31 |
---|---|
[프로그래머스 고득점kit] 그리디_체육복(c++) (0) | 2023.05.07 |
[프로그래머스 고득점kit] 완전탐색_카펫(c++) (0) | 2023.04.26 |
[프로그래머스 고득점kit] 정렬_H_index(c++) (0) | 2023.04.20 |
[프로그래머스 고득점kit] 정렬_가장 큰 수(c++) (0) | 2023.04.16 |