728x90
반응형
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/142085
풀이
최대한 많은 라운드를 진행시켜야 한다.
필자가 생각한 방법은 아래와 같다.
1. 우선 막지 못할때까지 병사를 소모한다.
2. 막지 못할 경우, 가장 많은 병사를 사용했던 곳에 무적권을 사용한다. (priority_queue)
3. 무적권을 다 쓰면 종료한다.
따라서, for문을 순회하며 priority_queue에 병사의 수를 push 하고, 무적권이 있는 경우 우선순위 큐에서 꺼내며 사용했던 병사를 복구하는 방법으로 구현하였다.
코드
#include <bits/stdc++.h>
using namespace std;
priority_queue<int> pq;
void use_coupon(int &n, int &k, vector<int> &enemy) {
k--;
if(!pq.empty()) {
n += pq.top();
pq.pop();
}
}
int solution(int n, int k, vector<int> enemy) {
int answer = 0;
for(int i = 0; i < enemy.size(); i++) {
n -= enemy[i];
pq.push(enemy[i]);
if(n < 0) {
if(k == 0) break;
use_coupon(n, k, enemy);
}
answer++;
}
return answer;
}
728x90
반응형
'Tech > Algorithm' 카테고리의 다른 글
[BOJ] 백준 2636 치즈 c++ (bfs) (2) | 2023.10.11 |
---|---|
[프로그래머스] 서강그라운드 c++ (다익스트라) (0) | 2023.09.13 |
[프로그래머스] 미로 탈출 c++ (bfs) (0) | 2023.09.08 |
[BOJ] 백준 14728 벼락치기 c++ (배낭, dp) (0) | 2023.08.01 |
[BOJ] 백준 9466 텀 프로젝트 c++ (dfs) (0) | 2023.07.15 |