Study/Baekjoon Online Judge
[백준/파이썬] 4153. 직각삼각형
growingtree
2021. 7. 7. 16:49
728x90
https://www.acmicpc.net/problem/4153
문제
과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
입력
입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다.
각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.
출력
각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
아이디어
직각삼각형인지 아닌지 판별하기 위해서 사용하는 "피타고라스 정리" 이용하면 되지 않을까?
** 피타고라스 정리 : 한 각이 직각인 삼각형이 있을 때, 가장 긴 변의 길이의 제곱이 나머지 두 변의 길이의 제곱의 합과 같다.
코드
while True:
lis = list(map(int, input().split(" ")))
sum = 0
if 0 not in lis:
lis = sorted(lis)
big = lis[2]
for x in range(0,2):
sum += lis[x]**2
if sum == big**2 : print("right")
else : print("wrong")
else: break
해설
while True:
# 입력 조건을 확인해보면, 여러 테스트케이스가 주어지고 마지막줄에 0 0 0이 입력되면 끝나게 된다.
# while 문으로 계속 입력을 받고 마지막 줄에 0 0 0 이 들어올 때 break 하는 것으로 코드를 짰다.
lis = list(map(int, input().split(" "))) # 입력으로 들어온 값을 list로 저장
sum = 0 # 제일 긴 변 말고 나머지 두 변의 제곱의 합을 담을 변수 sum
if 0 not in lis:
# 삼각형의 세 변 중 하나라도 0이면 삼각형이 될 수 없으므로 0이 없을 때만 아래 동작이 진행되도록 함
lis = sorted(lis) # list로 들어온 값들을 오름차순 정렬
big = lis[2] # 자동으로 가장 큰 값이 맨 뒤에 위치하게 됨. 삼각형이므로 항상 마지막 값(lis[2])이 제일 크다.
for x in range(0,2): # 리스트 중 0번째 1번째 값만 해당
sum += lis[x]**2 # 값을 제곱해서 sum에다가 더함
# for문을 다 돌게되면 제일 긴 변을 제외한 나머지 두 변의 제곱의 합이 sum에 담기게 됨
if sum == big**2 : print("right") # sum과 제일 긴 변의 제곱의 값이 같으면 right 출력
else : print("wrong") # 같지 않은 경우 wrong 출력
else: break
# 삼각형의 세 변 중 하나라도 0이면 while문을 break하고 프로그램 종료
반응형