티스토리 뷰

 

[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')

 

반응형
댓글
반응형