문제
세 막대의 길이가 주어질 때, 가장 긴 막대의 제곱과 나머지 두 막대 합의 제곱을 더한 값을 구하라.
입력
테스트 케이스 수 T, 각 케이스마다 세 정수가 주어진다.
출력
각 케이스마다 max^2 + (나머지 합)^2을 출력한다.
예제
| 입력 | 출력 |
|---|---|
1 3 4 5 | 74 |
풀이
세 수 중 최댓값과 나머지의 합으로 계산한다.
- 세 수 중 최댓값을
max로 구한다 - 나머지 두 수의 합
sum을 구한다 max^2 + sum^2을 출력한다
핵심 아이디어: 개미가 이동하는 거리의 제곱과 관련된 기하학적 계산으로, 직각삼각형의 빗변 관계와 유사하다.
코드
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin >> T;
long long a, b, c, max_abc, sum;
for (int i = 0; i < T; i++)
{
cin >> a >> b >> c;
max_abc = max({a, b, c});
if (max_abc == a)
{
sum = b + c;
}
else if (max_abc == b)
{
sum = a + c;
}
else
{
sum = a + b;
}
cout << max_abc * max_abc + sum * sum << "\n";
}
return 0;
}복잡도
- 시간: O(T) (T: 테스트 케이스 수)
- 공간: O(1)