- 문제
- 풀이
#include <iostream>
using namespace std;
int main()
{
int input[3] = { 0 };
int result = 0;
// 입력
for (int i = 0; i < 3; i++)
{
cin >> input[i];
}
// 정렬
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
if (input[j] > input[j + 1])
{
int temp = input[j];
input[j] = input[j + 1];
input[j + 1] = temp;
}
}
}
int sum = input[0] + input[1];
int max = input[2];
if (sum <= max)
{
// 삼각형이 형성 되기 위한 조건 미충족
// 따라서 max값 대신 sum - 1을 해준 값을 사용한다.
result = (sum * 2) - 1;
}
else
{
result = sum + max;
}
cout << result;
return 0;
}
- 메모
삼각형의 전제 조건이 되는, 각 변의 길이를 비교한 기본 성질을 이용한 문제다.
변의 길이를 따졌을 때 가장 긴 변의 길이가 나머지 두 변의 길이를 더한 값보다 같거나 작아야 한다.
따라서 이번 문제에서는
1. 삼각형의 기본 성질을 미충족 한 경우
2. 충족한 경우
이렇게 2가지 경우의 수에 맞춰 결과를 출력해야 한다.
문제에 따르면 막대의 길이를 연장하는 것은 불가능하지만 줄이는 것에는 제한이 없다.
따라서 우선 입력받은 값을 오름차순으로 정렬해서 가장 긴 변과 나머지 변이 구별되도록 만든다.
정렬 후에는 가장 긴 변이 input [2]에 입력된다.
이 값들을 사용해서 먼저 비교값이 될 input[0] + input [1]의 값을 변수 sum에 저장해 주고,
가장 긴 변 input [2]를 max 변수에 할당해 준다.
만약 1번에 해당하는 경우 max값이 sum의 값보다 작거나 같게 만들어 주기만 하면 되기 때문에
(sum * 2)를 한 값에 -1을 해주면 조건에 맞는 결과값이 도출된다.
반대로 2에 해당하는 경우 추가적인 연산이 필요하지 않기 때문에 바로 sum + max를 한 둘레를 그대로 출력했다.
'코딩테스트' 카테고리의 다른 글
[백준/25305번/C++] 커트라인 (0) | 2024.08.17 |
---|---|
☆ [백준/15894번/C++] 수학은 체육과목 입니다 (0) | 2024.08.16 |
[백준/9063번/C++] 대지 (0) | 2024.08.14 |
[백준/3009번/C++] 네 번째 점 (0) | 2024.08.13 |
[백준/1085번/C++] 직사각형에서 탈출 (0) | 2024.08.12 |