문제
과거 이집트인들은 각 변들의 길이가 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
풀이
직각삼각형의 성질을 이용합니다.
- 수학 (기하학)
- 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() 함수에 세 변의 길이를 집어넣어
직각삼각형을 만족시키는 지 판별합니다.
'개발(코딩) > 백준 문제풀이' 카테고리의 다른 글
[Python] 백준 7576번 토마토 (골드5) (0) | 2025.03.25 |
---|---|
[Python] 백준 11723번 집합 (실버5) (0) | 2025.03.25 |
[Python] 백준 1012번 유기농 배추 (실버2) (1) | 2025.03.25 |
[Python] 백준 1007번 벡터 매칭 (골드2) (0) | 2025.03.24 |
[Python] 백준 1004번 어린왕자 (실버3) (0) | 2025.03.24 |