BOJ

백준 17977 - Triangulation

yanJuicy 2020. 10. 8. 02:24
반응형

문제

 

www.acmicpc.net/problem/17977

 

17977번: Triangulation

A regular n-sided polygon P can be partitioned into n − 2 triangles by adding non-crossing line segments connecting two vertices of P. For example, a square can be partitioned into two triangles, a regular pentagon can be partitioned into three triangles

www.acmicpc.net

 

 

풀이

 

각 정다각형에서 다음과 같은 답이 나온다.

 

 

1. 정육각형의 경우 내부에 정삼각형이 있어야 거리가 최소가 된다.

이때 최대거리는 (정삼각형의 최대 거리 +2) 가 된다.

 

2.정팔각형의 경우 내부에 정사각형이 있어야 거리가 최소가 된다.

이때 최대 거리는 (정사각형의 최대 거리 +2) 가 된다.

 

3. 정십각형의 경우 내부에 정오각형이 있어야 거리가 최소가 된다.

이때 최대 거리는 (정오각형의 최대 거리 +2) 가 된다.

 

이 성질을 이용해서 짝수 정다각형에서 다음과 같은 점화식을 만들 수 있다.

dp[n] = dp[n/2] + 2 (n은 짝수)

 

홀수 n다각형의 경우 n+1정다각형의 경우와 답이 같게 된다.

따라서 최종으로 다음 점화식을 만들 수 있다.

 

dp[n] = dp[(n+1)/2] + 1

 

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h> 
using namespace std
 
int a[1000001];
 
int main() 
    ios_base::sync_with_stdio(false); 
    cin.tie(NULL); 
 
    int n;
 
    a[3= 0;
    a[4= 1;
 
    for (int i=5; i<=1000000; i++)
        a[i] = a[(i+1)/2+ 2;
    
    cin >> n;
    cout << a[n];
 
    return 0
 
cs

 

 

반응형

'BOJ' 카테고리의 다른 글

백준 2805 - 나무 자르기  (0) 2021.06.18
백준 1260 - DFS와 BFS  (0) 2021.06.12
백준 13398 - 연속합 2  (0) 2020.10.07
백준 8895 - 막대 배치  (0) 2020.10.06
백준 6603 - 로또  (0) 2020.04.30