© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 6322 - 직각 삼각형의 두 변

2024-09-23
BOJ
브론즈 III
cpp
원본 문제 보기
수학
기하학

문제

BOJ 6322 - 직각 삼각형의 두 변

직각 삼각형의 세 변 a, b, c 중 하나가 -1로 주어질 때, 피타고라스 정리(a^2 + b^2 = c^2)를 이용해 미지의 변 길이를 구하라.

입력

여러 줄에 걸쳐 a, b, c가 주어진다. 하나만 -1이다. 0 0 0이면 종료한다.

출력

각 케이스마다 미지의 변 길이를 소수점 3자리까지 출력한다. 불가능하면 "Impossible."을 출력한다.

예제

입력출력
3 4 -1 3 -1 4 0 0 0Triangle #1 c = 5.000 Triangle #2 b = 2.646

풀이

-1인 변을 판별하고 피타고라스 정리를 적용한다.

  1. 세 값 중 -1인 변을 찾는다
  2. c가 -1이면 sqrt(a^2 + b^2)로 계산한다
  3. a 또는 b가 -1이면 sqrt(c^2 - 다른변^2)으로 계산한다
  4. 제곱근 안의 값이 음수이면 "Impossible."을 출력한다

핵심 아이디어: 빗변(c)을 구할 때는 항상 가능하지만, 직각변(a, b)을 구할 때는 c^2 - 다른변^2이 음수일 수 있어 불가능 판정이 필요하다.

코드

#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
  int a, b, c, t = 0;
  while (cin >> a >> b >> c && (a || b || c))
  {
    cout << "Triangle " << '#' << ++t << '\n';
 
    float t;
    char i;
    if (a == -1)
    {
      i = 'a';
      t = (c * c) - (b * b);
    }
    else if (b == -1)
    {
      i = 'b';
      t = (c * c) - (a * a);
    }
    else
    {
      i = 'c';
      t = (a * a) + (b * b);
    }
 
    t = sqrt(t);
    cout << fixed;
    cout.precision(3);
    if (t > 0)
      cout << i << " = " << t << '\n';
    else
    {
      cout << "Impossible." << '\n';
    }
    cout << '\n';
  }
}

복잡도

  • 시간: O(T) (T: 테스트 케이스 수)
  • 공간: O(1)