[Programmers] #181829 - 이차원 배열 대각선 순회하기 [Java][C++][Python]
[Programmers] #181829 - 이차원 배열 대각선 순회하기 [Java][C++][Python]
1. 아이디어
i + j <= k를 만족하는 경우에 대해 board에서 합을 구하는 문제로 2차원 배열을 순회하며 인덱스의 합이 k 이하인 경우에만 합을 구하면 된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N \times M)$ | $O(1)$ |
($N$ = board의 행 수, $M$ = 열 수)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public int solution(int[][] board, int k) {
int sum = 0;
for (int i = 0; i < Math.min(board.length, k + 1); i++) {
for (int j = 0; j < board[i].length; j++) {
if (i + j > k) break;
sum += board[i][j];
}
}
return sum;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;
int solution(vector<vector<int>> board, int k) {
int sum = 0;
for (int i = 0; i < min((int)board.size(), k + 1); i++) {
for (int j = 0; j < board[i].size(); j++) {
if (i + j > k) break;
sum += board[i][j];
}
}
return sum;
}
1
2
3
4
5
6
7
8
9
def solution(board, k):
total = 0
for i, row in enumerate(board[: k + 1]):
for j, val in enumerate(row):
if i + j > k:
break
total += val
return total
This post is licensed under CC BY 4.0 by the author.