https://www.acmicpc.net/problem/1027
정말로 어려웠던 문제
실제 시험을 칠때는 활용하지 못하겠지만 기하학 문제라고 분류가 되어 있으면 기하학적으로 접근하자
처음에 대수적으로 가장 높은 빌딩에서 그 다음 빌딩까지 사이의 빌딩을 카운트 하면 되겠지 하고 쉽게 생각했지만
반례도 많고 프로그래밍 하기도 까다로웠다
(인접한 빌딩이 높이가 1 차이난다면 그 다음 빌딩은?)
결국 핵심 포인트는 빌딩이 서로를 볼 수 있으려면 그 사이의 빌딩과의 기울기보다 커야 된다는 것!!
#include<cstdio>
#include<algorithm>
int n, a[50], b[50];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%d", a + i);
}
for (int i = 0; i < n; i++) {
double t = -987654321, m;
for (int j = i + 1; j < n; j++) {
// 각 기둥에서 다른 기둥까지의 기울기 계산
//기울기가 이전 기울기보다 크면 양쪽 빌딩은 서로를 볼 수 있다
}
}
//최댓값 출력
printf("%d", *std::max_element(b, b + n));
return 0;
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 친구 - 복습(플루이드-와샬) (0) | 2021.02.05 |
---|---|
[백준] 명령 프롬프트 - 복습(c++ String) (0) | 2021.02.04 |
[백준] 보물 - 복습 (0) | 2021.02.04 |
[백준] 수열의 합 - 복습 (0) | 2021.01.31 |
[백준] 체스판 다시 칠하기 - 복습 (0) | 2021.01.31 |
댓글