[백준 11596] Triangle (C#, C++) - soo:bak
작성일 :
문제 링크
설명
주어진 두 삼각형의 변 길이로 직사각형을 한 번 잘라 만들 수 있는지 판단하는 문제입니다.
접근법
먼저 두 삼각형의 세 변을 각각 정렬해 가장 긴 변이 빗변이 되도록 맞춥니다.
다음으로 피타고라스 정리로 두 삼각형이 직각삼각형인지 확인합니다.
이후 두 삼각형의 세 변이 모두 같으면 같은 직각삼각형이므로 직사각형의 대각선으로 잘라 만들 수 있습니다.
마지막으로 조건을 만족하면 YES, 아니면 NO를 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
class Program {
static void Main() {
var parts = Console.In.ReadToEnd().Split();
var a = new int[3];
var b = new int[3];
for (var i = 0; i < 3; i++) a[i] = int.Parse(parts[i]);
for (var i = 0; i < 3; i++) b[i] = int.Parse(parts[i + 3]);
Array.Sort(a);
Array.Sort(b);
var rightA = a[0] * a[0] + a[1] * a[1] == a[2] * a[2];
var rightB = b[0] * b[0] + b[1] * b[1] == b[2] * b[2];
var same = a[0] == b[0] && a[1] == b[1] && a[2] == b[2];
Console.WriteLine(rightA && rightB && same ? "YES" : "NO");
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a[3], b[3];
for (int i = 0; i < 3; i++) cin >> a[i];
for (int i = 0; i < 3; i++) cin >> b[i];
sort(a, a + 3);
sort(b, b + 3);
bool rightA = a[0] * a[0] + a[1] * a[1] == a[2] * a[2];
bool rightB = b[0] * b[0] + b[1] * b[1] == b[2] * b[2];
bool same = a[0] == b[0] && a[1] == b[1] && a[2] == b[2];
cout << (rightA && rightB && same ? "YES" : "NO") << "\n";
return 0;
}