반응형
[ 문제 ]
준규는 집을 짓고 있다. 준규는 모든 벽 모양을 직각 삼각형으로 만들려고 한다. 적절히 나무를 잘라 삼각형을 만들었지만, 준규는 각도를 측정할 수 있는 도구를 가지고 있지 않다. 어쩔 수 없이 줄자를 이용해 삼각형 세 변의 길이를 측정한 다음, 직각 삼각형인지 아닌지를 알아보려고 한다.
삼각형 세 변의 길이가 주어졌을 때, 직각 삼각형인지 아닌지를 구하는 프로그램을 작성하시오.
[ 코드 ]
1. 내 코드
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int n = int.Parse(sr.ReadLine());
for (int i = 1; i <= n; i++)
{
int[] s = sr.ReadLine().Split().Select(int.Parse).ToArray();
int num1 = s[0] * s[0];
int num2 = s[1] * s[1];
int num3 = s[2] * s[2];
int c = Math.Max(num1, Math.Max(num2, num3));
int ab = num1 + num2 + num3 - c;
if(ab == c)
{
sw.WriteLine($"Scenario #{i}:\nyes\n");
}
else sw.WriteLine($"Scenario #{i}:\nno\n");
}
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 코드
using System;
using System.Text;
namespace no7510try1
{
internal class Program
{
static int GetSquare(int a) => a * a;
static void Main(string[] args)
{
StringBuilder result = new StringBuilder();
int count = int.Parse(Console.ReadLine());
for (int i = 1; i <= count; ++i)
{
string[] nums = Console.ReadLine().Split(' ');
int a = int.Parse(nums[0]);
int b = int.Parse(nums[1]);
int c = int.Parse(nums[2]);
result.Append($"Scenario #{i}:\n");
result.Append((2 * GetSquare(Math.Max(Math.Max(a, b), c)) == (GetSquare(a) + GetSquare(b) + GetSquare(c))) ? "yes\n" : "no\n");
if (i < count) result.Append('\n');
}
Console.Write(result);
}
}
}
[ 추가 ]
내가 푼 문제는 피타고라스가 아래와 같은 공식
여기서 c는 빗변
다른 사람 코드는 내 코드처럼 전체값에서 c를 빼지않고 비교값에 c의 제곱을 더해준다.
c제곱의 값이 두개이기때문에 2*c제곱으로 해주면 같은 값이 나온다.
굳이 Max값인 c을 찾고 총합에서 Max값을 빼주지않더라도 값을 구할 수 있다.
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/7510
최근에는 계속 피타고라스 정리 쓰는 문제만 많이 푸나 싶은데...... 기하학 태그를 올리고싶어서 기하학만 푸니깐요잉...
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 22938번 백발백준하는 명사수 (0) | 2024.04.05 |
---|---|
[C#] 백준 14264번 정육각형과 삼각형 (0) | 2024.04.04 |
[C#] 백준 3034번 앵그리 창영 (0) | 2024.04.03 |
[C#] 백준 3053번 택시 기하학(비유클리드 기하학) (0) | 2024.04.03 |
[C#] 백준 10569번 다면체 (오일러의 다면체 정리) (0) | 2024.04.03 |