- ν΄λ΅μ λ΄λ μ΄ν΄κ° μ΄λ €μ λ λ¬Έμ .
- arrayλ₯Ό μ λ ¬ν νμκ° μλ€λ κ²κΉμ§λ μμλλ° μ€λ³΅λ μ«μμ λν μ²λ¦¬, λΆμ°μμΈ μ«μμ λν μ²λ¦¬λ₯Ό μ΄λ€μμΌλ‘ ν΄μΌλ μ§ μκ°νκΈ° μ΄λ €μ λ€.
- μΌλΆ test caseμ λν΄μλ μ λ ¬λ arrayμ μ΄μν μ«μλΌλ¦¬ λΉκ΅νμ¬ μ°μλμ§ μμ κ²½μ°λ₯Ό κ°λ €λ΄λ©΄ ν리기λ νμ§λ§ μ€λ³΅λ μ«μκ° μ‘΄μ¬νλ©΄ μ²λ¦¬κ° μ΄λ €μ΄ λΆλΆμ΄ μλ€.
- λ¨Όμ arrayλ₯Ό μ λ ¬ν λ€ uniqueν elementλ§ λ¨κ²¨λλ€.
- κ·Έλ° λ€ κ° uniqueν element μ λνμ¬ λ€μκ³Ό κ°μ΄ κ²°κ³Όλ₯Ό κ³μ°νλ€ .
- λ₯Ό arrayμ μ΅μκ°μΌλ‘ νλ€λ©΄ arrayμ λ€μ΄κ° μ μλ μ΅λ κ°μ μ΄ λλ€.
- , λ₯Ό κΈ°μ€μΌλ‘ arrayλ₯Ό νννλ©΄ μλμ κ°λ€.
- μμ μλ μ«μλ€ () κ·Έλ¦¬κ³ λ€μ μλ μ«μλ€ () μ , μ¬μ΄μ μλ μ«μλ€λ‘ λ체λμ΄μΌλ§ 쑰건μ λ§μ‘±ν μ μλ€. λ°λΌμ μ΄ μ«μλ€μ κ°μκ° operationμ μκ° λλ€.
- μμ μλ μ«μλ€μ κ°μλ β
it - nums.begin()
- λ€μ μλ μ«μλ€μ κ°μλ β
N - (upper - nums.begin())
- μ°Έκ³ λ‘ upper bound μ΄κΈ° λλ¬Έμ arrayμ κ° μμ΄λ μκ΄ μλ€.
- κ²°κ³Όμ μΌλ‘ operationμ μλ
ops = N - (upper - nums.begin()) + it - nums.begin() = N - (upper - it)
κ° λλ€. - μ΄ κ° μ€μ μ΅μκ°μ μ°ΎμΌλ©΄ λλ€.
class Solution {
public:
int minOperations(vector<int>& nums) {
int N = nums.size();
sort(nums.begin(), nums.end());
auto numsEnd = unique(nums.begin(), nums.end());
int result = INT_MAX;
for (auto it = nums.begin(); it != numsEnd; ++it) {
int maxNum = *it + N - 1;
auto upper = upper_bound(it, numsEnd, maxNum);
int diff = upper - it;
result = min(result, N - diff);
}
return result;
}
};