- λ¬Έμ
νλλμ€ν¬λ ν λ²μ νλμ μμ λ§ μνν μ μμ΅λλ€. λμ€ν¬ 컨νΈλ‘€λ¬λ₯Ό ꡬννλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ΅λλ€. κ°μ₯ μΌλ°μ μΈ λ°©λ²μ μμ²μ΄ λ€μ΄μ¨ μμλλ‘ μ²λ¦¬νλ κ²μ λλ€.
μλ₯Ό λ€μ΄
- 0ms μμ μ 3msκ° μμλλ Aμμ
μμ²
- 1ms μμ μ 9msκ° μμλλ Bμμ
μμ²
- 2ms μμ μ 6msκ° μμλλ Cμμ
μμ²
μ κ°μ μμ²μ΄ λ€μ΄μμ΅λλ€. μ΄λ₯Ό κ·Έλ¦ΌμΌλ‘ νννλ©΄ μλμ κ°μ΅λλ€.
ν λ²μ νλμ μμ²λ§μ μνν μ μκΈ° λλ¬Έμ κ°κ°μ μμ μ μμ²λ°μ μμλλ‘ μ²λ¦¬νλ©΄ λ€μκ³Ό κ°μ΄ μ²λ¦¬ λ©λλ€.
- A: 3ms μμ μ μμ
μλ£ (μμ²μμ μ’
λ£κΉμ§ : 3ms)
- B: 1msλΆν° λκΈ°νλ€κ°, 3ms μμ μ μμ
μ μμν΄μ 12ms μμ μ μμ
μλ£(μμ²μμ μ’
λ£κΉμ§ : 11ms)
- C: 2msλΆν° λκΈ°νλ€κ°, 12ms μμ μ μμ
μ μμν΄μ 18ms μμ μ μμ
μλ£(μμ²μμ μ’
λ£κΉμ§ : 16ms)
μ΄ λ κ° μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ 10ms(= (3 + 11 + 16) / 3)κ° λ©λλ€.
νμ§λ§ A → C → B μμλλ‘ μ²λ¦¬νλ©΄
- A: 3ms μμ μ μμ
μλ£(μμ²μμ μ’
λ£κΉμ§ : 3ms)
- C: 2msλΆν° λκΈ°νλ€κ°, 3ms μμ μ μμ
μ μμν΄μ 9ms μμ μ μμ
μλ£(μμ²μμ μ’
λ£κΉμ§ : 7ms)
- B: 1msλΆν° λκΈ°νλ€κ°, 9ms μμ μ μμ
μ μμν΄μ 18ms μμ μ μμ
μλ£(μμ²μμ μ’
λ£κΉμ§ : 17ms)
μ΄λ κ² A → C → Bμ μμλ‘ μ²λ¦¬νλ©΄ κ° μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ 9ms(= (3 + 7 + 17) / 3)κ° λ©λλ€.
κ° μμ μ λν΄ [μμ μ΄ μμ²λλ μμ , μμ μ μμμκ°]μ λ΄μ 2μ°¨μ λ°°μ΄ jobsκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ κ°μ₯ μ€μ΄λ λ°©λ²μΌλ‘ μ²λ¦¬νλ©΄ νκ· μ΄ μΌλ§κ° λλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ. (λ¨, μμμ μ΄νμ μλ λ²λ¦½λλ€)
- μ½λ
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct cmp {
bool operator()(vector<int>& a, vector<int>& b) {
return a[1] > b[1];
}
};
int solution(vector<vector<int>> jobs) {
priority_queue<vector<int>, vector<vector<int>>, cmp> pq; //min heapμΌλ‘ ꡬμ±
int answer = 0;
int current = 0; //νμ¬ μκ°
int cnt = 1; // μ§νν μμ
μ
vector<int> job; //κΈ°μ€ μμ
sort(jobs.begin(), jobs.end()); // μμ² μκ°μ΄ μμ μμΌλ‘ μ λ ¬
//μμ² μκ°μ΄ κ°μ₯ μμ μμ
μ κΈ°μ€ μμ
μΌλ‘ μ€μ
pq.push(jobs[0]);
current = jobs[0][0];
while (!pq.empty()) { // pqκ° λΉμ§ μμ λκΉμ§ λ°λ³΅
//κΈ°μ€ job μλλ‘ μμμκ° κ³μ° ν νμ¬ μκ° λ³κ²½
job = pq.top();
pq.pop();
answer += ((current - job[0]) + job[1]);
current += job[1];
//νμ¬ μκ°λ³΄λ€ μμ² μκ°μ΄ μμλ μμ
λ€ λͺ¨λ pqμ push
for (; cnt < jobs.size() && jobs[cnt][0] <= current; cnt++) {
pq.push(jobs[cnt]);
}
//λ§μ½ νμ¬ μκ°λ³΄λ€ ν¨μ¬ λ¨μ΄μ§ μκ°μ μμ
μ΄ μλ€λ©΄ κΈ°μ€ μμ
λ°κΏ
if (pq.empty() && cnt < jobs.size()) {
current = jobs[cnt][0];
pq.push(jobs[cnt++]);
}
}
answer /= jobs.size();
return answer;
}
- ν΄μ€
1. struct cmp
: μ΄μ€ 벑ν°μ min heapμΌλ‘ μ λ ¬
2. solution ν¨μ
: μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ κ°μ₯ μ€μ΄λ λ°©λ²μΌλ‘ μ²λ¦¬νλ©΄ νκ· μ΄ μΌλ§κ° λλμ§ returnνλ ν¨μ
- μμ μ΄ κ±Έλ¦¬λ μκ°μΌλ‘ μ λ ¬λλ min heap pq μ μΈ
- μ΄ μμ μκ°μ μ μ₯νλ answer, νμ¬ μκ°μ μ μ₯νλ current, μ§νν μμ μλ₯Ό μ μ₯νλ cnt =1
- κΈ°μ€ μμ μ μ μ₯ν λ²‘ν° job
- λ¨Όμ μμ²μκ°μ΄ μμ μμΌλ‘ jobsλ₯Ό μ λ ¬
- μμ² μκ°μ΄ κ°μ₯ μμ μμ μ κΈ°μ€ μμ μΌλ‘ 1μ°¨ μ€μ , νμ¬ μκ°λ κΈ°μ€ μμ μ΄ μμλλ μκ°μΌλ‘ μ€μ
- whileλ¬Έμ ν΅ν΄ pqκ° λΉμ§ μμ λκΉμ§ μ°μ° λ°λ³΅
- κΈ°μ€ μμ μ pq.topμΌλ‘ μ€μ ν΄ νμ¬ μκ°μ μμν μ μλ μμ μ€ κ°μ₯ μμ μ΄ λΉ¨λ¦¬ λλλ μμ μ κΈ°μ€μΌλ‘ μ€μ
- answerμ νμ¬ μκ°μμ κΈ°μ€ μμ μ μμ μκ°μ λΊ κ°μΈ λκΈ° μκ° + μμ μ΄ κ±Έλ¦¬λ μκ°μ λν¨
- νμ¬ μκ°μ κΈ°μ€ μμ μ΄ κ±Έλ¦° μκ°μ λν¨
- κ³μ° μλ£ ν νμ¬ μκ°λ³΄λ€ μμ² μκ°μ΄ μμλ μμ λ€ λͺ¨λ pqμ push
- λ§μ½ νμ¬ μκ°λ³΄λ€ ν¨μ¬ λ¨μ΄μ§ μκ°μ μμ μ΄ μ‘΄μ¬νλ€λ©΄ κΈ°μ€ μμ μ κ·Έ μμ μΌλ‘ λ°κΎΈμ΄μ€
- answerμ κ°μ jobsμ μ¬μ΄μ¦λ‘ λλμ΄ νκ· μ ꡬν¨
'μκ³ λ¦¬μ¦ π©π»βπ» > νλ‘κ·Έλλ¨Έμ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] λμλ¬Έμ λ°κΏμ μΆλ ₯νκΈ° (0) | 2024.03.14 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] λ¬Έμμ΄ λ°λ³΅ν΄μ μΆλ ₯νκΈ° (0) | 2024.03.14 |
[νλ‘κ·Έλλ¨Έμ€] aμ b μΆλ ₯νκΈ° (0) | 2024.03.14 |
[νλ‘κ·Έλλ¨Έμ€] λ¬Έμμ΄ μΆλ ₯νκΈ° (0) | 2024.03.13 |
#κΈ°λ₯κ°λ° (0) | 2023.03.03 |