1329. Sort the Matrix Diagonally - medium
문제
Given a m * n matrix mat of integers, sort it diagonally in ascending order from the top-left to the bottom-right then return the sorted array.
제한사항
- m == mat.length
- n == mat[i].length
- 1 <= m, n <= 100
- 1 <= mat[i][j] <= 100
입출력 예
1
2
Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]
풀이
- Array, Sort
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class Solution {
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
int m = mat.size();
int n = mat[0].size();
// 첫번째 행의 대각선을 조사하여 정렬
for(int i = 0 ; i < n ; ++i){
vector<int> temp;
int colm = i, row = 0;
// 현재 요소의 대각선 값을 임시 vector에 저장
for(row = 0 ; row < m && colm < n ; ++row, ++colm){
temp.push_back(mat[row][colm]);
}
sort(temp.begin(), temp.end());
// 정렬한 값을 저장
row = 0; colm = i;
for(auto& j : temp){
if(row < m && colm < n){
mat[row][colm] = j;
}
++row; ++colm;
}
}
// 첫번째 열의 대각선을 조사하여 정렬
for(int i = 1 ; i < m ; ++i){
vector<int> temp;
int row = i, colm = 0;
// 현재 요소의 대각선 값을 임시 vector에 저장
for(int colm = 0 ; row < m && colm < n ; ++row, ++colm){
temp.push_back(mat[row][colm]);
}
sort(temp.begin(), temp.end());
// 정렬한 값을 저장
row = i; colm = 0;
for(auto& j : temp){
if(row < m && colm < n){
mat[row][colm] = j;
}
++row; ++colm;
}
}
return mat;
}
};