반응형
[ 문제 ]
한 변의 길이가 L인 정육각형을 가지고 있다. 오늘은 이 정육각형에 세 개의 겹치지 않는 대각선을 그리려고 한다.
대각선은 정육각형을 4개의 삼각형으로 나눈다. 4개의 삼각형 중에 면적이 제일 작은 삼각형의 면적을 S라고 한다.
가능한 S중에서 최댓값을 구하는 프로그램을 작성하시오.
[ 코드 ]
1. 내 코드
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int a = int.Parse(sr.ReadLine());
int c = a * 2;
double b = Math.Sqrt(Math.Pow(c, 2) - Math.Pow(a, 2));
double result = a * b / 4;
sw.Write(result);
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 참고 코드
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int a = int.Parse(sr.ReadLine());
sw.Write((Math.Sqrt(3)/4) * Math.Pow(a, 2));
sw.Flush();
sw.Close();
sr.Close();
[ 추가 ]
정육면체의 중점을 기준으로 직선을 그었을때 대각선의 길이는 정삼각형이 되기때문에 주어진 정육면체의 변의 길이의 2배이다. 그럼 피타고라스 정리로 b의 값도 구할 수 있는데
한변이 5라고 했을때 b는 루트75가 된다.
제일 작은 삼각형의 넓이를 구해야하기때문에 같은 밑변을 공유하는 이등변 삼각형을 보면 120도, 30도 30도이다.
120도 30도 30도는 빗변의 1/2가 높이값이기때문에 높이는 2.5이다.
그렇게 말고 높이를 구하려면 밑변의 중심에 각도가 90도가 되게 직선을 긋고 피타고라스의 정리를 사용하면 된다.
5^2 - (밑변/2)^2 = 높이^2
작은 삼각형은 큰 삼각형과 밑변을 공유하지만 높이가 1/2 만큼 차이가 나기 때문에 넓이도 큰 삼각형 넓이의 1/2를 곱해준 값이 된다.
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/14264
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 16483번 접시 안의 원 (0) | 2024.04.05 |
---|---|
[C#] 백준 22938번 백발백준하는 명사수 (0) | 2024.04.05 |
[C#] 백준 7510번 고급 수학 (0) | 2024.04.04 |
[C#] 백준 3034번 앵그리 창영 (0) | 2024.04.03 |
[C#] 백준 3053번 택시 기하학(비유클리드 기하학) (0) | 2024.04.03 |