반응형

 

 

<코드>

#include<iostream>
#include<algorithm>
using namespace std;

int N;
double building[51];
int x, ans, cnt;
double gradient, memo;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;

	for (int i = 1; i <= N; i++)
		cin >> building[i];
	
	for (int i = 1; i <= N; i++)
	{
		cnt = 0;

		memo = 1000000000; // 10억
		// 왼쪽 빌딩 탐색
		for (int j = i - 1; j >= 1; j--)
		{
			gradient = (building[i] - building[j]) / ((double)i - (double)j);
			if (gradient < memo)
			{
				cnt++;
				memo = gradient;
			}
		}

		memo = -1000000000; // -10억
		// 오른쪽 빌딩 탐색
		for (int j = i + 1; j <= N; j++)
		{
			gradient = (building[j] - building[i]) / ((double)j - (double)i);
			if (gradient > memo)
			{
				cnt++;
				memo = gradient;
			}
		}
		ans = max(ans, cnt);

	}

	cout << ans;
}

 

풀이 방법

 

i번째 빌딩 기준으로 왼쪽을 살펴볼때는 기울기가 감소하는 순서로,

오른쪽을 살펴볼때는 기울기가 증가하는 순서로 빌딩을 카운트 한다.

 

 

www.acmicpc.net/problem/1027

 

1027번: 고층 건물

세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작)

www.acmicpc.net

 

반응형

+ Recent posts