반응형
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;
}
'Algorithm > Math' 카테고리의 다른 글
(C++) - 백준(BOJ) 13301 : 타일 장식물 (0) | 2022.03.26 |
---|---|
(C++) - 백준(BOJ) 24568 : Cupcake Party (0) | 2022.03.20 |
(Python) - 백준(BOJ) 23972 : 악마의 제안 (0) | 2022.03.11 |
(C++) - 백준(BOJ) 12840 : 창용이의 시계 (0) | 2022.03.09 |
(C++) - 백준(BOJ) 9298 : Schronisko (0) | 2022.02.20 |