티스토리 뷰
[Python] 백준 알고리즘 온라인 저지 4153번 : 직각삼각형
Python3 코드
while True :
nums = list(map(int, input().split()))
if sum(nums) == 0:
break # 세 수가 0이면 break
max_num = max(nums)
nums.remove(max_num) # 빗변의 길이는 직각삼각형 세변의 길이중 가장 길다.
if nums[0]**2 + nums[1]**2 == max_num**2:
print('right')
else:
print('wrong')
Python3 코드 풀이
1. 코드 풀이에 대한 전체적인 내용 정리
이번 문제는 피타고라스의 정리를 이용하여 문제를 풀었다. 주어진 세 수가 피타고라스의 정리에 부합하면 right, 아니라면 wrong을 출력하였다. 코드는 while문을 사용하여 작성하였다. 문제의 예제가 몇 개가 입력될지 알 수 없고 마지막에 0 0 0이 입력되는 점을 이용하여 반복문을 끝냈다.
2. 피타고라스의 정리
직각 삼각형의 세 변 a, b, c에 대해 빗변이 c라면 a**2+b**2=c**2 이 성립한다. 즉, 빗변의 제곱은 다른 두 변의 제곱의 합과 같다.
3. while문 코드 상단, 숫자를 입력받고 while문을 끝내는 조건식을 작성한다.
while True :
nums = list(map(int, input().split()))
if sum(nums) == 0:
break # 세 수가 0이면 break
while문이 반복되는 동안 세 수를 입력받고서 list로 변환하여 nums 변수에 선언한다. 이때, 입력받는 세 수는 모두 양의 정수이다.
입력받은 세 수가 모두 0인 경우 while문을 끝내도록 if조건식을 작성하였다. sum함수로 nums 리스트의 합을 구하고 세 수의 합이 0인 경우, 즉 세 수가 0일 때 while문이 끝날 수 있도록 if조건문 안에 break를 작성한다.
4. while문 중반부, 세 수중 가장 큰 수를 찾아 리스트에서 삭제한다.
max_num = max(nums)
nums.remove(max_num) # 빗변의 길이는 직각삼각형 세변의 길이중 가장 길다.
입력받은 수 중 빗변이 될 수를 찾기 위해서 max 함수를 이용해서 리스트에서 가장 큰 수를 찾아 max_num이라는 변수에 선언한다. 그리고서 해당 수를 리스트에서 삭제했다.입력받는 세 수는 오름차순으로 입력되지 않는다. 가장 큰 수가 몇 번째에 있는지 알 수 없기 때문에 나머지 두 수의 제곱의 합을 구하기 위해서가장 큰 수를 구하고 리스트에서 제거했다.
5. 코드 하단부, 피타고라스 정리의 Boolean 값에 따라 출력문을 작성한다.
if nums[0]**2 + nums[1]**2 == max_num**2:
print('right')
else:
print('wrong')
if 조건식에서 피타고라스 정리가 True이면 'right', False이면 'wrong'을 출력하도록 했다.
6. 틀린 코드
입력받는 세 수가 오름차순인 줄 알고 코드를 썼을 때 틀렸다고 나왔다. 즉, 세 수는 오름차순으로 입력되지 않는다. 틀린 코드는 아래와 같다.
while True :
a, b, c = map(int, input().split())
if a == b == c == 0:
break
if a**2 + b**2 == c**2:
print('right')
else:
print('wrong')
'파이썬 스킬업 > 백준 알고리즘 연습' 카테고리의 다른 글
백준 3053 [파이썬] 택시기하학 : 원의 넓이 공식 (0) | 2020.07.22 |
---|---|
백준 3009 [파이썬] 네 번째 점 (1) | 2020.07.19 |
백준 1085 [파이썬] 직사각형에서 탈출 (0) | 2020.07.19 |