개발(코딩)/백준 문제풀이

[Python] 백준 4153번 직각삼각형 (브론즈3)

아는 개 산책 2025. 3. 25. 01:25

문제

과거 이집트인들은 각 변들의 길이가 3, 4, 5인 삼각형이 직각 삼각형인것을 알아냈다. 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.

입력

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

출력

각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.

예제 입력

6 8 10
25 52 60
5 12 13
0 0 0

예제 출력

right
wrong
right

풀이

직각삼각형의 성질을 이용합니다.

더보기
Point
  • 수학 (기하학)
  • list 다루기

소스코드

def is_right(l):
    mx = max(l)
    l.remove(mx)
    if mx**2 == l[0]**2 + l[1]**2:
        return 'right'
    else:
        return 'wrong'

while True:
    l = list(map(int,input().split()))
    if l == [0,0,0]:
        break
    print(is_right(l))

 

직각삼각형은 최대 변의 길이의 제곱이 나머지 두 변의 길이의 제곱의 합과 같습니다.

이를 코드로 바꿔봅시다.

 

Line 1~7

def is_right(l):
    mx = max(l)
    l.remove(mx)
    if mx**2 == l[0]**2 + l[1]**2:
        return 'right'
    else:
        return 'wrong'

 

입력값에 결과값을 도출해내는 형태는 함수로 정의하는 습관을 들여놓읍시다. (모듈화)

 

l은 삼각형 세 변의 길이를 담은 list라고 가정합시다. (ex. (6, 8, 10) )

세 변의 길이 중 최댓값을 찾아줍니다. => mx

list 에서 mx 값을 제거합니다. => l = (6, 8)

 

list에 남은 두 변의 길이의 제곱의 합과 최댓값을 비교하여,

 

같으면 ( if mx**2 == l[0]**2 + l[1]**2: ) ,

'right'

다르면( else: ),

'wrong' 

 

을 반환하도록 합니다.

Line 9~13

while True:
    l = list(map(int,input().split()))
    if l == [0,0,0]:
        break
    print(is_right(l))

 

입력값이 '0 0 0'이 나오기 전까지 반복해야 하므로, while True를 걸어줍니다.

해당 입력값이 나오면 while문을 break로 끊읍시다.

 

l에 입력값을 list 형태로 받습니다.

list(map(int,input().split())) 는 입력값을 띄어쓰기로 분리한 후, integer(정수)로 변환시킨 뒤, list에 차례로 집어넣습니다.

 

입력값이 '0 0 0'이면, l에는 [0, 0, 0]이 들어가게 되며, if l == [0, 0, 0] 조건을 만족시켜,

while문을 끊고 프로그램을 종료합니다.

 

그 외의 입력이 들어오면, 위에 정의했던 is_right() 함수에 세 변의 길이를 집어넣어

직각삼각형을 만족시키는 지 판별합니다.