728x90
SMALL
백준 문제 풀이: 6322 [직각 삼각형의 두 변]
문제 링크: https://www.acmicpc.net/problem/6322
문제 설명:
직각 삼각형에서 세 변 중 두 변의 길이가 주어졌을 때, 나머지 한 변의 길이를 계산하는 문제입니다. 주어진 값 중 하나는 -1로 표시되며, 이는 해당 변의 길이를 구해야 함을 나타냅니다.
주어진 조건:
- 직각 삼각형의 두 변의 길이 합은 항상 빗변보다 작아야 합니다.
- -1로 표시된 변을 계산할 때, 불가능한 경우 "Impossible."을 출력합니다.
문제 해결 코드
#include <iostream>
#include <cmath>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int t = 1; // 테스트 케이스 번호
while (true) {
double a, b, c;
cin >> a >> b >> c;
// 종료 조건
if (a == 0 && b == 0 && c == 0) {
break;
}
cout << "Triangle #" << t++ << '\n'; // 테스트 케이스 출력
cout << fixed;
cout.precision(3); // 소수점 3자리까지 출력
if (a == -1) {
// a를 계산
a = sqrt(c * c - b * b);
if (b >= c || a <= 0) {
cout << "Impossible." << '\n';
} else {
cout << "a = " << a << '\n';
}
} else if (b == -1) {
// b를 계산
b = sqrt(c * c - a * a);
if (a >= c || b <= 0) {
cout << "Impossible." << '\n';
} else {
cout << "b = " << b << '\n';
}
} else {
// c를 계산
c = sqrt(a * a + b * b);
cout << "c = " << c << '\n';
}
cout << '\n'; // 테스트 케이스 간 공백
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 피타고라스의 정리를 사용하여 직각 삼각형의 세 변 중 하나를 계산합니다:
- 빗변 \( c \): \( c = \sqrt{a^2 + b^2} \)
- 밑변 또는 높이 \( a \) 또는 \( b \): \( a = \sqrt{c^2 - b^2} \), \( b = \sqrt{c^2 - a^2} \)
- 계산된 변의 길이가 양수가 아니거나 조건에 맞지 않으면 "Impossible."을 출력합니다.
- 구현 세부사항:
- 입력 값 중 -1이 존재하는 변을 기준으로 다른 두 변을 사용해 계산합니다.
- 테스트 케이스 간 번호를 출력하고, 각 결과는 소수점 셋째 자리까지 출력합니다.
- 시간 복잡도 분석:
- 입력과 계산은 모두 상수 시간에 수행되므로 O(1)입니다.
- n개의 테스트 케이스에 대해 O(n)의 시간 복잡도를 가집니다.
결과
주어진 세 변 중 -1이 있는 변을 정확히 계산하며, 불가능한 경우에는 "Impossible."을 출력합니다.
테스트 케이스 간 결과를 깔끔하게 출력하며, 정확도와 효율성을 보장합니다.
728x90
LIST
'BAEKJOON > 수학' 카테고리의 다른 글
백준 24264번 [알고리즘 수업 - 알고리즘의 수행 시간 3](C++) -yes6686- 티스토리 (0) | 2024.07.19 |
---|---|
백준 6376번 [e 계산](C++) -yes6686- 티스토리 (0) | 2024.07.18 |
백준 15734번 [명장 남정훈](C++) -yes6686- 티스토리 (4) | 2024.07.16 |
백준 19572번 [가뭄(Small)](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
백준 10539번 [수빈이와 수열](C++) -yes6686- 티스토리 (0) | 2024.07.14 |