본문 바로가기
알고리즘 문제 풀이

[백준] 고층건물 - 복습(hard)

by pinok1o 2021. 2. 4.

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;
}

댓글