- μ’μΈ‘ μλ¨ μ½λ λΆν° μμνμ¬ μ & μ€λ₯Έμͺ½ λ°©ν₯ λκ°μ μΌλ‘ λͺ¨λ μ«μλ₯Ό μ½μ΄μ λλ €μ£Όμ΄μΌ νλ λ¬Έμ μ΄λ€.
- λ¬Έμ λ₯Ό μλ κ·Έλλ‘ ν΄μνμ¬ κ΅¬νν κ²½μ° μκ° λ³΅μ‘λκ° μ κ·Όμ ν μ μμΌλ©° μκ° μ΄κ³Όλ‘ μ€ν¨νλ€.
- νλ ¬μ ν¬ν¨λ μ 체 μ«μμ κ°μλ κ° μ΄μ§λ§ row, columnμ μ΅λ κΈΈμ΄λ κ°κ° κ° λ μ μμΌλ―λ‘ loopλ₯Ό μλͺ» μμ±νλ©΄ λ§νΌ μλνκ² λ μ μλ€.
- 첫λ²μ§Έ ννΈ(κ°μ λκ°μ μ μν μ«μμ row, column index ν©μ κ°λ€)λ₯Ό λ³΄κ³ νμλ€.
- νλ ¬μ κ° μ«μλ₯Ό μ κ·Όνλ index pairμ λͺ©λ‘μ λ§λ€κ³ μ΄κ²μ μνλ μμλ‘ μ λ ¬νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
- λ¨Όμ νλ ¬μ κ° μμλ₯Ό μ κ·Όν μ μλ index pairμ λͺ©λ‘μ λ§λ λ€.
- index pairλ₯Ό μ λ ¬νλ€.
- κ° λκ°μ μ ν¬ν¨λ μμμ row, column indexμ ν©μ΄ λμΌνκ³ ν©μ΄ μμ λκ°μ λΆν° μ κ·Όν΄μΌ νλ€.
- λ°λΌμ row, column indexμ ν©μ΄ λ€λ₯Έ κ²½μ° μμ μμλλ‘ μ λ ¬νλ€.
- λ§μ½ row, column indexμ ν©μ΄ κ°λ€λ©΄ row indexκ° ν° κ²μ΄ λ¨Όμ μ€λλ‘ μ λ ¬νλ€.
- μ λ ¬λ index pair λͺ©λ‘μ μ΄μ©νμ¬ νλ ¬μ κ° μ«μλ₯Ό μ κ·Όνμ¬ λλ €μ€λ€.
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& nums) {
vector<pair<int, int>> indices;
for (int i = 0; i < nums.size(); ++i) {
int n = nums[i].size();
for (int j = 0; j < n; ++j) {
indices.emplace_back(i, j);
}
}
auto compare = [](pair<int, int>& a, pair<int, int>& b) {
int aSum = a.first + a.second;
int bSum = b.first + b.second;
return aSum != bSum? aSum < bSum : a.first > b.first;
};
sort(indices.begin(), indices.end(), compare);
vector<int> result;
result.reserve(indices.size());
for (auto& i : indices) {
result.push_back(nums[i.first][i.second]);
}
return result;
}
};