백준 1027 고층 건물

https://www.acmicpc.net/problem/1027

모든 고층 빌딩에 대하여 보이는 빌딩의 수를 구할 수 있습니다.

보이는 빌딩의 수를 구하는 과정은 간단합니다.

i번째 빌딩에 대하여 i-1,i-2, … ,1 빌딩의 기울기를 구합니다. 현재까지 기울기의 최댓값보다 큰 기울기가 나왔을때만 그 빌딩이 보인다고 할 수 있습니다.

같은 방식으로 i+1, … ,n 빌딩의 기울기를 구해줍니다.

#include<bits/stdc++.h>
using namespace std;
const int SZ=55;
const double INF=1e9+5;
int arr[SZ];
int main(void){
	ios::sync_with_stdio(false); cin.tie(NULL);
	int n; cin>>n;
	for(int i=1;i<=n;i++) cin>>arr[i];
	int ans=0;
	for(int i=1;i<=n;i++){
		int tmp=0;
		double mn=INF;
		for(int j=i-1;j>=1;j--){
			double xx=(double)(arr[j]-arr[i])/(double)(j-i);
			if(xx<mn){
				tmp++;
				mn=xx;
			}
		}
		double mx=-INF;
		for(int j=i+1;j<=n;j++){
			double xx=(double)(arr[j]-arr[i])/(double)(j-i);			
			if(xx>mx){
				tmp++;
				mx=xx;
			}
		}
		ans=max(ans,tmp);
	}
	cout<<ans;
	return 0;
}