728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
์ฒ์์๋ DP๋ก ๋ฌด์ ๊ถ ์คํฌ์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ์ ์ ํ์ ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ์ฌ ํ์ด๋๊ฐ๋ ค๊ณ ํ๋๋ฐ, ๋ฌด์ ๊ถ ์คํฌ ๊ฐ์(k)์ ๋ณ์ฌ๋ค ์(n)๊ฐ ๊ฐ์ ๊ฒ ์๋๋ผ์ ๊ทธ๋ ๊ฒ ํ ์๊ฐ ์๋๋ผ๊ตฌ์. ๊ทธ๋์ ์คํ(Stack)์ ์ด์ฉํด์ ํฐ ์ซ์๋ฅผ ๋ฌด์ ๊ถ ์คํฌ๋ก ์คํตํ๋ ํ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์๋๋ฐ, ์ด๊ฒ ์ญ์ ์ต์ ์ด๋ผ๋ ๋ณด์ฅ์ด ์์์ต๋๋ค.
๋ฐฉ๋ฒ์ ์ฐ์ ์์ ํ(Priority Queue, heap)์๋ค์. ์ ์ด ์๊ฐ์ ๋ชป ํ์๊น์. ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค.
- ํ์ฌ ๋ณ์ฌ ์(n)๊ฐ ํ์ฌ ๋ผ์ด๋์ ์ ์ ์(enemy[i])๋ณด๋ค ์๊ณ , ๋ฌด์ ๊ถ ์คํฌ ๊ฐ์(k)๊ฐ 0๊ฐ๋ผ๋ฉด ๋ฃจํ ์ข
๋ฃ
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด, enemy[i]๋ฅผ ์ฐ์ ์์ ํ์ ๋ฃ๊ณ , n -= enemy[i]๋ฅผ ํด์ค๋๋ค.
- ๋ผ์ด๋๋ +1 ํด์ค๋๋ค.
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋ณ์ฌ ์ด์์ผ๋ก ์ฌ์ฉ ํ๋ค๋ฉด(n < 0), ์ฐ์ ์์ ํ์์ ํ๋์ฉ popํ์ฌ n์ ๋ํด์ค๋๋ค.
- pop์ ํ ๋๋ง๋ค k๋ฅผ 1๊ฐ์ฉ ์ค์ฌ์ค๋๋ค.
- k > 0์ด๊ณ , n >= 0์ด ๋์๋ค๋ฉด ๋ฃจํ๋ฅผ ์ข ๋ฃ
- k == 0์ด๊ณ , n < 0์ด๋ผ๋ฉด ํ์ฌ ๋ผ์ด๋๋ ๋นผ๊ณ ๋ฃจํ ์ข ๋ฃ
- ๋ชจ๋ ๋ผ์ด๋๋ฅผ ํด๋ฆฌ์ดํ๋ค๋ฉด enemy ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ฆฌํดํ๊ณ , ์๋๋ผ๋ฉด ์นด์ดํธ ํ ๋ผ์ด๋ ์ ๋ฆฌํด
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
#include <queue>
using namespace std;
int solution(int n, int k, vector<int> enemy) {
int answer = 0;
priority_queue<int> enemies;
int i = 0;
for (; i < enemy.size(); i++) {
if (n < enemy[i] and k == 0)
break;
enemies.emplace(enemy[i]);
n -= enemy[i];
answer++;
while (!enemies.empty() and n < 0) {
if ((k == 0 and n < 0)) {
answer--;
break;
}
n += enemies.top();
enemies.pop();
k--;
}
}
return i == enemy.size() ? enemy.size() : answer;
}
728x90
๋ฐ์ํ
'๐คAlgorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๋ ์ ์ฌ์ด์ ์ ์ ์ | C++ (0) | 2023.07.03 |
---|---|
[Programmers] Lv2. ์ฐ๋ฐ์์ด ์ ์ ๋ถ | C++ (0) | 2023.07.01 |
[Programmers] Lv2. ํ ์ด๋ธ ํด์ ํจ์ | C++ (0) | 2023.07.01 |
[Programmers] Lv2. ๋ฌธ์์ด ์์ถ | C++ (0) | 2023.06.30 |
[Programmers] Lv2. ํ๋ ฌ ํ ๋๋ฆฌ ํ์ ํ๊ธฐ | C++ (0) | 2023.06.28 |