Algorithm/baekjoon

[BOJ 3049] 다각형의 대각선

식빵민 2022. 8. 3. 01:46
 

3049번: 다각형의 대각선

세 대각선이 한 점에서 만나지 않는 볼록 N각형이 주어졌을 때, 대각선의 교차점의 개수를 세는 프로그램을 작성하시오. 아래 그림은 위의 조건을 만족하는 한 육각형의 교차점 그림이다. 모든

www.acmicpc.net

문제 분석

  • 도형에서 대각선의 교차점이 생기기 위한 조건 : 꼭짓점 4개
    - 대각선의 교차점이 생기기 위해서는 두 대각선이 필요하다.
    - 두 대각선이 존재하기 위해서는 꼭짓점 4개가 필요하다.

풀이 방식

  • n각형의 꼭짓점 갯수는 n개, 그중 4개를 뽑는 경우는 nC₄ 로 표현 가능 하다.
  • nC₄ = n!/(n-4)!4! = n(n-1)(n-2)(n-3)/24
#include <iostream>

using namespace std;

int n, meet = 1;

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

    cin >> n;
    if (n < 4) {
        cout << 0;
        return 0;
    }
    for (int i = 0; i < 4; i++) {
        meet *= (n - i);
    }
    meet /= 24;
    cout << meet;
    return 0;
}

느낀 점

  • 수학 공식을 알고 풀면 금방 푸는 문제다.
  • 처음엔 대각선의 개수를 구하고 대각선 중 2개를 고르려 했지만 서로 만나지 않는 경우가 있으므로 이 방법은 틀렸다.
  • 사각형의 교차점의 개수가 1개라는 부분에서 큰 힌트를 얻었다.

시간복잡도  : O(1)