Study/Baekjoon Online Judge

[백준/파이썬] 4153. 직각삼각형

growingtree 2021. 7. 7. 16:49

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

 

4153번: 직각삼각형

입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다.

www.acmicpc.net

 

문제

과거 이집트인들은 각 변들의 길이가 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하고 프로그램 종료

 

반응형