문제 풀이:)
2차원 배열에서 나올 수 있는 모든 모래시계를 구한 다음에 그 모래시계의 합의 최댓값을 구하면 되는 문제다.
모래시계를 어떻게 구할 수 있을까?
시작 좌표가 0부터 시작한다고 하면 다음과 같이 모래시계를 구할 수 있다.
(0,0) (0,1) (0,2)
(1,1)
(2,0) (2,1) (2,2)
2차원 배열에서 나올 수 있는 모든 모래시계는 어떻게 찾을 수 있을까?
하나의 좌표를 기준으로 확인해보면 된다.
여기서 하나의 좌표를 기준은 모래시계의 최상단 왼쪽 배열인 (0,0)을 기준으로 확인하면 된다.
만약에 6 x 6 배열에서 찾고자 한다면 범위는
열로 보면 0 ~ 3까지만,
행로 보면 0 ~ 3까지만,
탐색하면 된다.
만약에 4를 보면?
(0,4) (0,5) (0,6)
(1,5)
(2,4) (2,5) (2,6)
이미 인덱스를 넘어서게 된다.
이러한 범위만 주의해서 코드를 짜면 문제를 해결할 수 있다.
int hourglassSum(vector<vector<int>> arr) {
int ans = -987654321;
int row = arr.size();
int col = arr[0].size();
for(int i = 0; i < row - 2; i++) {
for(int j = 0; j < col - 2; j++) {
int sum = 0;
sum += arr[i][j] + arr[i][j+1] + arr[i][j+2];
sum += arr[i+1][j+1];
sum += arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2];
ans = max(ans, sum);
}
}
return ans;
}
'Algorithm' 카테고리의 다른 글
[백준 14425] 문자열 집합 (0) | 2021.10.11 |
---|---|
[백준 1753] 최단경로 (0) | 2021.10.11 |
[프로그래머스] 방문 길이 (C++) (0) | 2021.06.04 |
[프로그래머스] 영어 끝말잇기 (C++) (0) | 2021.06.04 |
[프로그래머스] 위장 (C++) (0) | 2021.05.31 |