알고리즘 문제 해결/BOJ

[브루트 포스] BOJ 1198 삼각형으로 자르기

jmkimmessi 2022. 2. 11. 00:00
반응형

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

 

1198번: 삼각형으로 자르기

볼록 다각형이 있고, 여기서 3개의 연속된 점을 선택해서 삼각형을 만든다. 그 다음, 만든 삼각형을 다각형에서 제외한다. 원래 다각형이 N개의 점이 있었다면, 이제 N-1개의 점으로 구성된 볼록

www.acmicpc.net

 

문제 해결 알고리즘

 

세 점을 선택해 고를 수 있는 삼각형의 넓이를 모두 골라 가장 큰 삼각형의 넓이를 출력한다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int result = 0;

int triangle_area(int x_1, int y_1, int x_2, int y_2, int x_3, int y_3){
    
    return abs((x_1*y_2 + x_2*y_3 + x_3*y_1)-(x_1*y_3 + x_2*y_1 + x_3*y_2));
}

int main(){
    int N; cin >> N;
    
    vector<pair<int, int>> v(N);
    for(int i=0;i<N;i++){
        cin >> v[i].first >> v[i].second;
    }
    
    for(int i=0;i<N-2;i++){
        for(int j=i+1;j<N-1;j++){
            for(int k=j+1;k<N;k++){
                result = max(triangle_area(v[i].first, v[i].second, v[j].first, v[j].second, v[k].first, v[k].second), result);
            }
        }
    }
    
    cout << result / 2;
    
    if(result % 2 == 1) cout << ".5";
}

 

메모

 

double로 쓰면 범위 때문에 틀리므로 int를 쓰고 마지막에 .5를 붙이거나 안 붙이는 방식으로 해야 정답을 구할 수 있다.

반응형