- κ° μκ° λ§λ€ κ½μ΄ ν κ°μλ₯Ό 미리 κ³μ°ν΄λλ©΄ λ§€λ² κ΅¬κ° λ³λ‘ λΉκ΅νμ§ μμλ λλ€.
- λ§€λ² κ΅¬κ° λ³λ‘ λΉκ΅νκ² λλ©΄ μκ° λ³΅μ‘λκ° κ° λμ΄μ μκ° μ νμ μ΄κ³Όνκ² λλ€.
- κ° κ΅¬κ°μ μμμ μλ κ½μ΄ ν κ°μκ° 1κ° μ¦κ°νκ³ λμ λ€μ μκ°μλ κ½μ΄ ν κ°μκ° 1κ° κ°μνλ€. μ΄μ λ°λΌμ κ½μ΄ ν κ°μκ° λ³ννλ μμ λ° λ³ννλ κ°μλ₯Ό map
delta
μ κΈ°λ‘νλ€.
- λ³ννλ κ°μμ map
delta
λ‘ λΆν° λ³ν μμ λ³ κ½μ΄ νΌμ΄μλ κ°μλ₯Ό array count
μ κΈ°λ‘νλ€. - deltaμ μλ κ°μ λμ ν΄μ λνλ©΄ ν΄λΉ μμ μμ κ½μ΄ νΌμ΄μλ κ°μλ₯Ό ꡬν μ μλ€.
- κ° μ¬λμ΄ λλ¬ν μμ
time
μ κΈ°μ€μΌλ‘ count
μμ ν΄λΉλλ λ³ν μμ μ upper_bound
λ₯Ό μ΄μ©νμ¬ μ°Ύλλ€. - μ°Ύμμ§ μμΉκ°
count
arrayμ 첫λ²μ§ΈμΈ κ²½μ° λλ¬ν μμ μ 첫λ²μ§Έ λ³ν μμ μ΄μ μ΄λΌλ μλ―Έμ΄λ―λ‘ νΌμ΄μλ κ½μ΄ νλλ μλ κ²μ΄ λλ€. - λλ¨Έμ§ κ²½μ°μλ μ°Ύμμ§ μμΉ
itr
κ° λλ¬ μμ μ΄νμ μ²μ κ½μ κ°μκ° λ³νν μμ μ΄λ―λ‘ ν΄λΉ μμ μ itr - 1
μ κ°μ΄ νμ¬ κ½μ κ°μκ° λλ€.
- μ΄λ κ² νλ©΄ μκ° λ³΅μ‘λλ κ° λλ€.
delta
λ₯Ό ꡬμ±νλ€: count
λ₯Ό ꡬμ±νλ€: - κ° μ¬λλ³λ‘
count
μμ μμ μ μ°Ύλλ€:
class Solution {
public:
vector<int> fullBloomFlowers(vector<vector<int>>& flowers, vector<int>& people) {
map<int, int> delta;
for (auto& flower : flowers) {
++delta[flower[0]];
--delta[flower[1] + 1];
}
vector<pair<int, int>> count;
int prev = 0;
for (auto& entry : delta) {
int curr = entry.second + prev;
count.emplace_back(entry.first, curr);
prev = curr;
}
vector<int> result;
auto compare = [](const pair<int, int>& a, const pair<int, int>& b) {
return a.first < b.first;
};
for (auto time : people) {
auto itr = upper_bound(count.begin(), count.end(), make_pair(time, 0), compare);
if (itr == count.begin())
result.push_back(0);
else
result.push_back((itr - 1)->second);
}
return result;
}
};