jyamethyst21 님의 블로그

백준 14215번 - 세 막대 (PYTHON 풀이) 본문

CODING 💻

백준 14215번 - 세 막대 (PYTHON 풀이)

jyamethyst21 2025. 9. 12. 13:45

문제:

해당 문제는 입력값을 더해서 삼각형을 만들 수 있는 조건이 되면 전체 둘레를, 그렇지 못하면 막대의 길이를 조절하여 삼각형을 만들어내고 이에 대한 둘레를 구하면 되는 문제이다. 주의해야할 점은 둘레를 최대로 하는 것이기 때문에 가장 긴 길이를 최소한으로만 줄여서 즉, 삼각형을 만들어낼 수 있는 조건을 충족하되 가장 긴 길이로 만들고 이를 출력하면 된다.

 

풀이:

a,b,c=map(int,input().split())
k=[a,b,c]
q=max(k)
k.remove(q)

if q<sum(k):
    print(sum([a,b,c]))
else:
    print((sum(k)-1)+sum(k))

삼각형이 되려면 가장 긴 길이를 제외하고, 나머지 변 길이를 더했을 때 가장 긴 길이보다 길어야 한다.

내가 작성한 코드 같은 경우는 길지만 최대한 직관적으로 작성하려고 했기 때문에 어떤 걸 하려고 했는지 이해가 될 것이다.

 

입력을 받고 이를 리스트에 담는다. 그 후 가장 긴 길이를 q에, 그 외에 두 변은 k 리스트에 냅둔 다음 조건문을 실행한다.

나머지 두 변을 더한 다음 가장 긴 길이보다 크면 삼각형의 조건이 맞기 때문에 둘레를 전부 더한 수를 출력하면 되고, 그렇지 않으면 가장 긴 길이를 최소한만큼만(1) 줄여서 바꾼 뒤 나머지 두 변을 더해서 출력하면 된다.

 

다른 아이디어로는 sorted 함수를 활용해서 입력받은 수를 오름차순으로 정리하고 [0], [1] 인덱스 위치를 나머지 두 변, [2]를 가장 긴 변으로 두고 min 함수로 [2]와 ([0]+[1]-1) 중 작은 것을 출력하면 조건문 없이도 좀 더 간단하게 풀 수 있을 거 같다.