본문 바로가기

BAEKJOON/수학

백준 6322번 [직각 삼각형의 두 변](C++) -yes6686- 티스토리

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