barcode

백준 14215번 풀이

BOJ/[BOJ] Python

문제

https://www.acmicpc.net/problem/14215

 

14215번: 세 막대

첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.

www.acmicpc.net

막대기 세 개가 주어졌을 때, 이걸로 만들 수 있는 삼각형의 최대 둘레는?

 

풀이

이 문제 보자마자 본인 표정:

근데 이 문제, 막상 풀어보면 쉽다. 아니 진짜 쉽다니까요? 앞에서 풀었던 세 변으로 삼각형 판별하는 문제에 나왔던 부등식만 기억하면 진짜 금방 풀린다. 삼각형 부등식에서 제일 긴 변 >= 나머지 두 변 길이의 합이면 삼각형이 성립 안 된다고 했잖아요? 요것만 딱 기억하시면 됨.

 

import sys

byeon = list(map(int,sys.stdin.readline().split()))

뭐야 배열로 가져와요? 예, 배열로 가져옵니다. 왜냐하면 제일 긴 변이 필요하거든...

 

import sys

byeon = list(map(int,sys.stdin.readline().split()))
byeon.sort()

정렬까지 하면 준비는 끝났다. 이렇게 하면 제일 긴 변은 해당 배열의 맨 끝이 되니까, 로직만 짜면 된다. 

 

이 문제에서 로직을 어떻게 짤 거냐... 간단하다. 제일 긴 변이 나머지 두 변의 합보다 크거나 같으면 후가공 절차를 들어가고, 아니면 그대로 리스트 합을 출력하면 된다. 2, 2, 2는 2 < 2+2이기때문에 그냥 합을 통으로 더하면 되지만, 만약 4 2 2라면 4 = 2+2니까 후가공 절차가 필요하다.

 

import sys

byeon = list(map(int,sys.stdin.readline().split()))
byeon.sort()

if byeon[2] >= byeon[1] + byeon[0]:
    byeon[2] = byeon[1] + byeon[0] - 1
    print(sum(byeon))
else: 
    print(sum(byeon))

자 생각해봅시다. 나머지 두 변의 합보다 작으면 삼각형이 성립된다. 예시에 나왔던 1 100 1도 다른 두 변의 합인 2보다 작은 정수, 1로 잘라서 1+1+1 해서 3이다. 그니까 제일 긴 변이 나머지 두 변의 합보다 크거나 같으면, 나머지 두 변의 길이의 합에서 1을 뺀 만큼만 남기고 막대기를 자르면 된다. 그죠?

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 24263번 풀이  (0) 2023.07.05
백준 24262번 풀이  (0) 2023.07.03
백준 5073번 풀이  (0) 2023.06.28
백준 10101번 풀이  (0) 2023.06.27
백준 9063번 풀이  (0) 2023.06.26