index를 통해서 왼쪽 두 높이와 오른쪽 두 높이를 검사한다.
왼쪽 두 높이 중 더 큰 값과 현재 index의 값의 차이와 오른쪽 두 높이 중 더 큰 값과 현재 index의 값의 차이를 구한다.
만일 현재 index의 값이 더 작으면 조망이 확보될 수 없으므로 -1을 넣어 따로 구분한다.
둘 다 -1이 아닐 경우, 둘 중 더 작은 값이 조망이 확보된 높이이다.
#include <iostream>
#include <ios>
using namespace std;
int width, heights[1000];
int getResult();
int main() {
cin.tie(0); ios::sync_with_stdio(0);
for (int tc = 1; tc <= 10; tc++) {
cin >> width;
for (int i = 0; i < width; i++) cin >> heights[i];
cout << '#' << tc << ' ' << getResult() << "\n";
}
return 0;
}
int getResult() {
int result = 0;
for (int i = 2; i < width - 2; i++) {
// 왼쪽 확인
int left = heights[i - 2] > heights[i - 1] ? heights[i - 2] : heights[i - 1];
int leftView = heights[i] - left > 0 ? heights[i] - left : -1;
// 오른쪽 확인
int right = heights[i + 2] > heights[i + 1] ? heights[i + 2] : heights[i + 1];
int rightView = heights[i] - right > 0 ? heights[i] - right : -1;
if (leftView != -1 && rightView != -1) result += leftView < rightView ? leftView : rightView;
}
return result;
}
'알고리즘 > SWEA' 카테고리의 다른 글
SW 문제해결 기본 - Array 2 (0) | 2019.04.29 |
---|---|
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2019.04.27 |
SW 문제해결 기본 - Array 1 (0) | 2019.04.27 |
[SWEA] 1289. 원재의 메모리 복구하기 (0) | 2019.04.27 |
[SWEA] 1928. Base64 Decoder (0) | 2019.04.26 |
댓글