현재 남은 병사에서 만약 막을 수 있다면 막으면서 해당 값을 최대값으로 저장한다.
그후 만약 저장된 값을 검사해서
1.만약 기존 값이 크다면 전의 걸 무적권을 쓰고 해당 수만큼 병사를 돌려받는다.
2.만약 기존 값이 현재의 수보다 작을 때 막을 수 있으면 막고
3.아닐 때 저장된 큰 값이 없는 경우는 무적권을 쓰거나 게임오버
#include <string>
#include <vector>
#include <queue>
using namespace std;
//큰값 저장 및 검사
int solution(int n, int k, vector<int> enemy) {
priority_queue<int> pq;
int answer = 0;
for(int i=0;i<enemy.size();i++){
if(n>=enemy[i]){ //만약 현재가진 병사로 막을 수 있다면
n-=enemy[i];
pq.push(enemy[i]); //최대적 수 저장
}else{
if(k>0){ //무적권이 남아있다면
if(!pq.empty()&&pq.top()>enemy[i]){ //만약 전에 최대였던 수가 현재적보다 크다면
n+=pq.top(); //무적권을 사용해서 돌려받기
pq.pop();
pq.push(enemy[i]);
n-=enemy[i]; //전에 무적권을 쓰고 지금꺼는 병사로 막기
}
k--;
}else
return i;
}
}
return enemy.size();
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV2][C++]멀쩡한 사각형 (0) | 2024.06.19 |
---|---|
[프로그래머스][LV2][C++]문자열 압축 (0) | 2024.06.18 |
[프로그래머스][LV2][C++]하노이의 탑 (0) | 2024.06.11 |
[프로그래머스][LV2][C++]리코쳇 로봇 (0) | 2024.06.11 |
[프로그래머스][LV2][C++]거리두기 확인하기 (0) | 2024.06.09 |