Coding Test/SW Expert Academy
[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View c++
owls
2022. 11. 19. 19:11
728x90
- 문제
왼쪽과 오른쪽으로 창문을 열었을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보된다고 말한다.
빌딩들에 대한 정보가 주어질 때, 조망권이 확보된 세대의 수를 반환하는 프로그램을 작성하시오.
- 문제 해결
"맨 왼쪽 두 칸과 맨 오른쪽 두 칸에 있는 건물은 항상 높이가 0이다."
라는 조건을 보고 (기준 index +- 2), (기준 index +-1) 값을 비교하여 풀어야 겠다고 판단했다.
기준 값이 비교 값보다 크다면, 비교 값들 중 max값을 찾아 (기준 값 - 비교 값) 을 하면 답을 구할 수 있다.
#include<iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T = 10;
for(test_case = 1; test_case <= T; ++test_case)
{
int n = 0;
cin >> n;
vector<int> vec(n , 0);
for(int i = 0; i < n; i++){
cin >> vec[i];
}
int result = 0;
for(int i = 2; i < vec.size() - 2; i++){
int nMax = INT8_MIN;
if( vec[i-2] < vec[i] && vec[i-1] < vec[i] && vec[i+1] < vec[i] && vec[i+2] < vec[i]){
nMax = max( max(vec[i-2], vec[i-1]), max( vec[i+1], vec[i+2] ) );
result += ( vec[i] - nMax );
}
}
cout << "#" << test_case << " " << result << endl;
}
return 0;
}
728x90