728x90
반응형
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/142085
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
최대한 많은 라운드를 진행시켜야 한다.
필자가 생각한 방법은 아래와 같다.
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 |