백준/C++

[백준] 14215번: 세 막대 | C++ 풀이

성실한 당근농부 2023. 6. 15. 23:34

# 문제

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만큼만 작게 설정해주면 된다.

그 후에는 둘레를 구해 출력하면 바로 정답이다!

 

 

 

 

 

 


 

 

 

 

14215번: 세 막대

첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.

www.acmicpc.net

 

728x90