Algorithm/Cases-Study

SWEA-1206 View

Xi_kor 2021. 3. 25. 20:40

가로길이를 입력받고, 그 가로길이만큼을 배열에 입력받은 뒤 좌로 두칸, 우로 두칸을 검사하면서 좌 우의 빌딩들이 해당 빌딩보다 작은지 검사했다. (같거나 큰 경우 해당 열에서는 조망권이 확보되지 않는다.) 좌로 두칸, 우로 두칸의 빌딩들 중 가장 큰 값을 구해 해당 열의 빌딩에서 빼서 최종 값에 더해주었다.

#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;
int a[1010];

int main(){
	for(int T=1; T<=10; T++){
		int n;
		cin>>n;
		
		for(int i=0; i<n; i++){
			cin>>a[i];
		}
		int sum=0;
		for(int i=2; i<n-2; i++){
			int val=a[i];
			int status=0;
			int maximum=-1;
			
			for(int j=i-1; j>=i-2; j--){
				if(a[j]<val){
					if(a[j]>maximum)	maximum=a[j];
				}
				else status=1;
			}
			
			for(int j=i+1; j<=i+2; j++){
				if(a[j]<val){
					if(a[j]>maximum)	maximum=a[j];
				}
				else status=1;
			}
			
			if(status==1) continue;
			sum+=(val-maximum);
			//cout<<sum<<" ";
		}
		cout<<"#"<<T<<" "<<sum<<'\n';
	}
	return 0;
}