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

메인 알고리즘은 아래와 같다.
for(int i=1; i<=n; i++) { // 각 건물마다
int cnt = 0;
// 왼쪽 건물들 체크 → cnt 증가
// 오른쪽 건물들 체크 → cnt 증가
res = max(res, cnt); // 최댓값 갱신
}
단 왼쪽, 오른쪽 건물들을 확인할 때 사이 건물들과의 기울기도 계속해서 비교를 해준다.
#include <iostream>
#include <algorithm>
using namespace std;
int n, res;
int arr[51];
int main() {
cin >> n;
for(int i=1; i<=n; i++) {
cin >> arr[i];
}
for(int i=1; i<=n; i++) {
int cnt = 0;
// 왼쪽 확인
for(int j=1; j<i; j++) {
bool visible = true;
double gradient_a = (arr[i] - arr[j]) / double(i - j);
for(int k=j+1; k<i; k++) {
double gradient_b = (arr[i] - arr[k]) / (double)(i-k);
if (gradient_a >= gradient_b) {
visible = false;
break;
}
}
if(visible) cnt++;
}
// 오른쪽 확인
for(int j=i+1; j<=n; j++) {
bool visible = true;
double gradient_a = (arr[j] - arr[i]) / double(j-i);
for(int k=i+1; k<j; k++) {
double gradient_b = (arr[k] - arr[i]) / (double)(k-i);
if(gradient_a <= gradient_b) {
visible = false;
break;
}
}
if(visible) cnt++;
}
res = max(res, cnt);
}
cout << res << "\n";
return 0;
}반응형
'PS' 카테고리의 다른 글
| [프로그래머스 Lv.2] 퍼즐 게임 챌린지 (0) | 2025.12.11 |
|---|---|
| [프로그래머스 Lv.2] 비밀 코드 해독 (0) | 2025.12.10 |
| [프로그래머스 Lv.2] 서버 증설 횟수 (0) | 2025.12.09 |
| [프로그래머스 Lv.2] 완전범죄 (0) | 2025.12.08 |
| [BOJ 2179] 비슷한 단어 (0) | 2025.12.08 |