Post

[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.