https://www.acmicpc.net/problem/1027
어느 시점에 건물이 가려지는지를 파악하는 문제였다.
건물을 연결하다 보면 기울기를 쓰면 되겠다라고 판단되는데, k번째 건물의 왼쪽과 오른쪽을 볼때 왼쪽으로는 기울기가 점점 작아져야 하고, 오른쪽으로는 기울기가 점점 커져야 한다.
아래의 그림을 보면 잘 이해가 된다.
import math
n = int(input())
arr = list(map(int,input().split()))
ans = 0
for k in range(n):
left_acc = math.inf
right_acc = -math.inf
cnt = 0
for i in range(k-1,-1,-1):
tmp_acc = (arr[k]-arr[i]) / (k-i)
if tmp_acc < left_acc:
left_acc = tmp_acc
cnt += 1
for i in range(k+1,n):
tmp_acc = (arr[k] - arr[i]) / (k-i)
if tmp_acc > right_acc:
right_acc = tmp_acc
cnt += 1
ans = max(ans,cnt)
print(ans)