1. 문제 상세
https://www.acmicpc.net/problem/14215
2. 문제 접근
세 변의 길이를 입력받아서 가장 큰 삼각형을 만들고 그 둘레를 출력하자.
이 문제에서 포인트는 막대의 길이를 줄일 수 있다는 것이다.
삼각형에서 세 변 a, b, c 가 있다고 할 때, c 가 가장 긴 변이라면 a + b > c 가 되어야 한다.
따라서 입력받은 세 변의 길이를 오름차순 a, b, c 형식으로 정렬한다.
변의 길이가 a + b > c 이거나 세 변이 모두 같다면 세 변의 길이의 합을 출력한다.
아닌 경우에는 변의 길이를 줄일 수 있으므로 c 의 값이 a + b 의 값보다 작도록, 즉 c 가 a + b - 1 의 값이 되도록 한다.
이 때 삼각형의 둘레의 길이는 a + b + c 이므로 결과적으로 구해야 하는 값은 (a + b) * 2 - 1 이된다.
3. 문제 풀이
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a[3];
cin >> a[0] >> a[1] >> a[2];
sort(a, a + 3);
if (a[0] + a[1] > a[2] || (a[0] == a[1] && a[0] == a[2])) cout << a[0] + a[1] + a[2];
else cout << (a[0] + a[1]) * 2 - 1;
}
크기가 3인 정수형 배열 a 를 선언한다.
cin 으로 정수 3개(세 변의 길이)를 입력받아 배열 a 에 저장한다.sort 함수로 배열 a 전체를 오름차순으로 정리한다.
if문으로 배열 a 의 0번, 1번 인덱스 값(작은 두 변)의 합이 2번 인덱스의 값(가장 긴 변)보다 크거나,0, 1, 2 번 인덱스의 값이 모두 같다면 cout 으로 0, 1, 2 번 인덱스의 값들의 합을 출력한다.아닌 경우 cout 으로 0, 1번 인덱스(작은 두 변)의 합 * 2 - 1 값을 출력한다.
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 기하: 직사각형과 삼각형' 카테고리의 다른 글
[백준] 5073번 : 삼각형과 세 변 | C++ (0) | 2023.10.20 |
---|---|
[백준] 10101번 : 삼각형 외우기 | C++ (0) | 2023.10.20 |
[백준] 9063번 : 대지 | C++ (0) | 2023.10.20 |
[백준] 15894번 : 수학은 체육과목 입니다 | C++ (0) | 2023.10.20 |
[백준] 3009번 : 네 번째 점 | C++ (0) | 2023.10.20 |