본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 14215 : 세 막대

반응형

https://www.acmicpc.net/problem/14215

 

14215번: 세 막대

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

www.acmicpc.net

삼각형의 성질을 이해해 푼 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

세 막대의 길이를 저장할 일차원 배열 a를 선언 하고 입력받습니다.

📔 풀이과정

세 막대는 모두 줄일 수만 있습니다.

세 막대를 상기 이미지와 같이 적절히 줄여 만들기 위해서 삼각형의 성질을 알 필요가 있습니다.

가장 긴 변을 c라고 가정했을 때 삼각형이 만들어지기 위해서는 c >= a + b 어야 합니다.

 

1. 입력받은 배열 a를 오름차순으로 정렬합니다.

2. 정답은 두 가지의 경우로 나뉘게 됩니다.

   2-1. c > a + b인 경우 막대기를 줄일 필요없으므로 최대 둘레의 길이가 a + b + c가 됩니다.

   2-2. 그 외의 경우 막대기 c를 적절히 줄여야 합니다. c를 a + b - 1로 줄이면 됩니다.

   따라서 답은 (a + b) * 2 - 1입니다.

📔 정답출력

정답에 맞게 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int a[3];
int main(){
    cin >> a[0] >> a[1] >> a[2];
    sort(a, a + 3);
    if(a[0] + a[1] > a[2]) cout << a[0] + a[1] + a[2];
    else cout << (a[0] + a[1]) * 2 - 1;
}