# 문제
a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.
# 풀이
따로 포스팅 하진 않았지만 삼각형 외우기의 다음 문제인 삼각형과 세 변 문제를 풀었다면 쉽게 풀었을 문제다.
그게 아니라도 삼각형의 성립 조건을 기억하고 있는 사람이라면 누구나 쉽게 풀 수 있다.
바로 정답 소스코드를 확인해보자.
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int arr[3];
cin >> arr[0] >> arr[1] >> arr[2];
sort(arr, arr+3);
if(arr[0] + arr[1] <= arr[2]) arr[2] = arr[0] + arr[1] - 1;
cout << arr[0]+arr[1]+arr[2];
return 0;
}
이번 문제에서는 어차피 세 개씩만 사용하기 때문에 for문을 사용하지 않고 그냥 적었다.
각 막대의 길이는 모두 양수라고 했기 때문에 따로 검사하지 않고 크기 3의 배열을 만들어 값을 넣어주었다.
이때 주어진 막대로 둘레가 가장 긴 삼각형을 만들기 위해서는 삼각형의 성립 조건을 알 필요가 있다.
그건 바로 가장 긴 변의 길이가 나머지 변의 길이의 합보다 작아야 한다는 것이다.
따라서 길이를 담은 배열을 sort 함수를 통해 오름차순 정렬을 해준 후 풀이를 진행했다.
삼각형 성립 조건 검사 시 조건이 성립하지 않는다면 가장 긴 막대의 값을 조절해주어야 하는데 우리는 둘레를 최대한 길게 만들어야 한다. 따라서 가장 긴 변의 길이를 나머지 두 변을 더한 값보다 1만큼만 작게 설정해주면 된다.
그 후에는 둘레를 구해 출력하면 바로 정답이다!
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 24263번: 알고리즘 수업 - 알고리즘의 수행 시간 2 | C++ 풀이 (0) | 2023.06.17 |
---|---|
[백준] 24262번: 알고리즘 수업 - 알고리즘의 수행 시간 1 | C++ 풀이 (0) | 2023.06.16 |
[백준] 10101번: 삼각형 외우기 | C++ 풀이 (0) | 2023.06.14 |
[백준] 9063번: 대지 | C++ 풀이 (0) | 2023.06.13 |
[백준] 1085번: 직사각형에서 탈출 | C++ 풀이 (0) | 2023.06.12 |