Adventure Time - Jake [백준/python] 14215 세막대:
본문 바로가기
Back-end/백준(python)

[백준/python] 14215 세막대:

by bogyoi 2023. 10. 26.
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)) 를 출력해주면 된다.