a, b, c=map(int, input().split())
if a<=0 or b<=0 or c<=0:
exit
if max(a,b,c)>=a+b+c-max(a,b,c): #삼각형 조건에 안 맞음
print((a+b+c-max(a,b,c)-1)+(a+b+c-max(a,b,c)))
else: #주어진 세 막대의 길이가 이미 삼각형의 조건에 맞음
print(a+b+c)
주어진 세 막대의 길이가 삼각형의 조건에 맞는다면 그냥 그 길이를 다 더해주면 최대 둘레 길이가 된다.
그러나 삼각형 조건에 안 맞을 경우( 세 변의 길이가 주어졌을 때 길이가 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야한다는 조건) , 즉 코드에서는 길이가 가장 긴 변의 길이가 다른 두 변의 길이의 합과 크거나 같은 경우에 막대의 길이를 줄여주는 작업이 필요하다는 것이다.
가장 긴 변의 길이 < 나머지 두 변의 길이의 합 을 만족시키면서,
막대의 길이를 줄여주되, 둘레가 가장 길어야하므로,
이 가장 긴 변의 길이는 나머지 두 변의 길이의 합보다 1만큼만 작은 경우가 둘레가 가장 긴 경우가 된다.(변의 길이는 정수라고 했으므로)
따라서, (a+b+c-max(a,b,c))=나머지 두 변의 길이로 식을 작성할 수 있고,
가장 긴 변의 길이= 나머지 두 변의 길이 -1 이다.
따라서, 삼각형의 둘레 = 가장 긴 변의 길이-1 + 나머지 두 변의 길이 를 출력해주면 되므로
(a+b+c-max(a,b,c)-1) + (a+b+c-max(a,b,c)) 를 출력해주면 된다.
'Back-end > 백준(python)' 카테고리의 다른 글
[백준/python] 24313 알고리즘수업-점근적표기1: 빅오 조건 (1) | 2023.10.26 |
---|---|
[백준/python] 24267 알고리즘수업-알고리즘의수행시간6: 조합 (0) | 2023.10.26 |
[백준/python] 5073 삼각형과세변: 삼각형이 될 조건 (0) | 2023.10.26 |
[백준/python] 10101 삼각형외우기: (0) | 2023.10.26 |
[백준/python] 9063 대지: (0) | 2023.10.26 |