1. ๋ฌธ์
์ถ์ฒ : https://school.programmers.co.kr/learn/courses/30/lessons/87946
์ ์ ์ ํ์ฌ ํผ๋ก๋ k์ ๊ฐ ๋์ ๋ณ "์ต์ ํ์ ํผ๋ก๋", "์๋ชจ ํผ๋ก๋"๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด dungeons ๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ ์ ๊ฐ ํํํ ์ ์๋ ์ต๋ ๋์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2. ์ฝ๋
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//์์ด next_permutation์ ํ์ฉํ์ฌ์ ํ์ด
//๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๊ณ์ฐํ ๋ค์ ์ฐจ๋ก๋ก ๊ฒ์ฆํจ
int solution(int k, vector<vector<int>> dungeons) {
int answer = 0;
vector<int> v;
// 0๋ถํฐ ๋์ ์ฌ์ด์ฆ๊น์ง ๋ฒกํฐ์ ์ ์ฅ
for(int i=0; i<dungeons.size(); i++){
v.push_back(i);
}
do{
int pirodo=k;
int count=0;
for(int i=0; i<v.size(); i++){
if(pirodo>=dungeons[v[i]][0]){
//ํผ๋ก๋ ์ฐจ๊ฐ ๋ฐ ๋์ ๊ฐฏ์ ์ฌ๋ฆฌ๊ธฐ
count++;
pirodo-=dungeons[v[i]][1];
}
}
answer=max(answer,count);
}while(next_permutation(v.begin(),v.end()));
return answer;
}
3. ํด์ค
//์์ด next_permutation์ ํ์ฉํ์ฌ์ ํ์ด
//๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๊ณ์ฐํ ๋ค์ ์ฐจ๋ก๋ก ๊ฒ์ฆํจ
int solution(int k, vector<vector<int>> dungeons) {
int answer = 0;
vector<int> v;
// 0๋ถํฐ ๋์ ์ฌ์ด์ฆ๊น์ง ๋ฒกํฐ์ ์ ์ฅ
for(int i=0; i<dungeons.size(); i++){
v.push_back(i);
}
๊ฒฝ์ฐ์ ์๊ฐ ๋ง์ง ์๊ธฐ์ ์์ ํ์์ ํตํด ํ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ ํด์ง ๋ฐฐ์ด์์ ์์๋ฅผ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ๋๋ ์์ด์ ์ฌ์ฉํด์ ๋ง๋ค์ด์ค๋ค.
๋จผ์ 0~ ๋์ ์ ๊ฐฏ์ ๊น์ง์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋ค.
๋ง์ฝ ๋์ ์ ๊ฐฏ์๊ฐ 3์ด๋ผ๋ฉด [0,1,2] ๊ฐ ๋ง๋ค์ด์ง๋ค.
do{
int pirodo=k;
int count=0;
for(int i=0; i<v.size(); i++){
if(pirodo>=dungeons[v[i]][0]){
//ํผ๋ก๋ ์ฐจ๊ฐ ๋ฐ ๋์ ๊ฐฏ์ ์ฌ๋ฆฌ๊ธฐ
count++;
pirodo-=dungeons[v[i]][1];
}
}
answer=max(answer,count);
}while(next_permutation(v.begin(),v.end()));
๋ง๋ค์ด์ง ๋ฐฐ์ด์ ๊ฐ์ง๊ณ next_permutation() ํจ์๋ฅผ ํตํด์ ์์ด์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
do while๋ฌธ์ ํตํด ์์ด์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์์ฌ ๋ ํผ๋ก๋์ ๋์ ์ด ํ์ํ ์ต์ ํผ๋ก๋๋ฅผ ๋๊ธด๋ค๋ฉด ๋์ ์ ํด๋ฆฌ์ดํ๋๋ก ์ค๊ณํ๋ค.
๋ง์ฝ ์ต์ ํผ๋ก๋๋ฅผ ๋๊ธฐ์ง ๋ชปํ๋ฉด ๊ณ์ฐํ์ง ์๊ณ ๋์ด๊ฐ๋ค.
๊ณ์ฐ์ด ๋๋ ํ ๋ง์ฝ Count๊ฐ ๊ธฐ์กด์ answer๋ณด๋ค ํด ๊ฒฝ์ฐ answer์ count ๊ฐ์ ์ฝ์
ํ๋ค.