C++ - 백준 3049 다각형의 대각선

2024. 11. 17. 16:45C_C++

728x90
반응형
/* 백준 3049 다각형의 대각선
https://www.acmicpc.net/problem/3049

* 문제

세 대각선이 한 점에서 만나지 않는 볼록 N각형이 주어졌을 때, 대각선의 교차점의 개수를 세는
프로그램을 작성하시오.

아래 그림은 위의 조건을 만족하는 한 육각형의 교차점 그림이다.

        https://upload.acmicpc.net/2afc17c7-9814-4678-b876-b082ea89b995/-/preview/

모든 내부각이 180도보다 작은 다각형을 볼록 다각형이라고 한다.

* 입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 100)

* 출력

첫째 줄에 교차점의 개수를 출력한다.

* 예제 입력 1

3

* 예제 출력 1

0

* 예제 입력 2

4

* 예제 출력 2

1

* 예제 입력 3

6

* 예제 출력 3

15

* 풀이

일단 세 대각선이 한 점에서 만나지 않는다는 조건을 이해해야 합니다.
그림에서 가운데 부분에 점이 하나로 만나지 않고 세 개의 점으로 만난다는 것을 이해해야 합니다.

그렇다면 이제, 대각선의 교차점을 하나 만들려고 하면 어때야 하는지 생각해 봅시다.

          +-------+
          |\     /|
          | \   / |   
          |  \ /  |
          |   X   |
          |  / \  |
          | /   \ |
          |/     \|
          +-------+

결론은 꼭지점이 4개면 하나의 교차점을 만들 수 있습니다.

        이제 최종적으로, N 각형에서 몇 개의 교차점이 생기느냐 
    ==  N 각형에서 4개의 꼭지점을 고르는 경우의 수와 같다
    ==> NC4 (조합)

과 같은 문제가 됩니다.

         n!
nCr = --------
      (n-r)!r!

         n!      n(n-1)(n-2)(n-3)   n(n-1)(n-2)(n-3)   n(n-1)(n-2)(n-3)
nC4 = -------- = ---------------- = ---------------- = ----------------
      (n-4)!4!         4!               4x3x2x1              24

가 됩니다.

*/

#include <iostream>

int main() {
	int n;
    std::cin >> n;

	std::cout << n * (n - 1) * (n - 2) * (n - 3) / 24 << '\n';
}
728x90
반응형

'C_C++' 카테고리의 다른 글

C++ - 백준 2484 주사위 네개  (1) 2024.11.17
C++ - 백준 3059 등장하지 않는 문자의 합  (0) 2024.11.17
C++ - 백준 4493 가위 바위 보?  (2) 2024.11.15
C++ - 백준 5524 입실 관리  (0) 2024.11.15
C++ - 백준 2592 대표값  (0) 2024.11.14