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