- μλ μ«μμ λ€μ§μ μ«μμ ν©μ΄ κ°μ λ μ«μμ μ κ°μλ₯Ό ꡬνλ λ¬Έμ .
- 쑰건μ νννλ©΄ μλμ κ°λ€.
nums[i] + rev(nums[j]) == rev(nums[i]) + nums[j]
- μ 쑰건μ λ³ννλ©΄ μλμ κ°λ€.
nums[i] - rev(nums[i]) == nums[j] - rev(nums[j])
- νλ§λλ‘ λ§νλ©΄ μλ μ«μ, λ€μ§μ μ«μμ μ°¨μ΄κ° κ°μ λ index μμ κ°μλ₯Ό ꡬνλ©΄ λλ€.
- νμ΄λ λ€μκ³Ό κ°μ΄ μ΄λ£¨μ΄μ§λ€.
- λ¨Όμ μλ μ«μ, λ€μ§μ μ«μμ μ°¨μ΄λ₯Ό κ³μ°νλ€. μλ μ«μλ νμμκΈ° λλ¬Έμ
nums
μ μ°¨μ΄ κ°μ λ€μ μ μ₯νλ€. - κ·Έ μ°¨μ΄ κ° μ«μλ₯Ό μ λ ¬νλ€.
- λ§μ§λ§μ λλ―Έ κ° (λ§μ§λ§ κ° + 1)μ μΆκ°νλ€.
- 루ν λ°μμ λ§μ§λ§ κ° νλͺ©μ λν κ°μ λ°λ‘ κ³μ°ν΄λ λμ§λ§ μ€λ³΅ μ½λκ° μκΈ°λ―λ‘β¦
nums
μ μλ μ°¨μ΄ κ°λ€μ μννλ©΄μ λμΌν κ°λ€μ μ«μλ₯Ό μΈκ³ μ΄λ₯Ό λ°νμΌλ‘ index μ μ‘°ν©μ κ°μλ₯Ό κ³μ°νλ€.nums
κ° μ λ ¬λμ΄μκΈ° λλ¬Έμ λμΌν κ°λ€ λΌλ¦¬ λΆμ΄μκ² λλ€. λ°λΌμ κ°μ΄ λ¬λΌμ§ λκΉμ§ μ«μμ κ°μλ₯Ό μΈλ©΄ λμΌν κ°λ€μ μ«μλ₯Ό μ
μ μλ€.- μ°¨μ΄ κ°μ΄ λμΌν
k
κ°μ indexκ° μμλ κ·Έ μ€μ 2κ° κ°μ 골λΌμ μμ λ§λ€λ©΄ k x (k - 1) / 2
κ°κ° λλ€. - κ³±νκΈ° μ°μ°μμ overflowκ° λ°μν μ μμΌλ―λ‘
long long
μΌλ‘ casting νλ€. - κ³±ν κ²°κ³Ό, κ·Έλ¦¬κ³ κ²°κ³Ό κ° λνλ λΆλΆμμ overflowκ° λ°μν μ μμΌλ―λ‘
1e9 + 7
λ‘ λͺ¨λλ¬ μ°μ°μ νλ€.
class Solution {
public:
static constexpr int MOD = 1e9 + 7;
int rev(int v) {
int result = 0;
while (v > 0) {
result *= 10;
result += v % 10;
v /= 10;
}
return result;
}
int countNicePairs(vector<int>& nums) {
for (int i = 0; i < nums.size(); ++i) {
nums[i] = nums[i] - rev(nums[i]);
}
sort(nums.begin(), nums.end());
nums.push_back(nums.back() + 1);
int count = 0;
int prev = 0;
int result = 0;
for (auto diff : nums) {
if (diff != prev) {
int subResult = (
count * static_cast<long long>(count - 1) / 2
) % MOD;
result = (result + subResult) % MOD;
count = 0;
}
prev = diff;
++count;
}
return result;
}
};