백준 4153번 풀이

문제

피타고라스 정리가 성립하는 지 확인하면 되는 매우 간단한 문제. 간단한데 정답률이 51%밖에 안 되는 이유는 아래에 서술하도록 하겠음

풀이

피타고라스의 정리는 다들 아시겠지만

이거다. 아니 공식도 간단하겠다 파이썬에서 제곱이 **인 것만 알면 되겠다(참고로 ^은 XOR이다)…

import sys
a,b,c=map(int,sys.stdin.readline().split())
while (a != 0 and b != 0 and c != 0):
  if a ** 2 + b ** 2 == c ** 2:
    print("right")
  else:
    print("wrong")
  a,b,c=map(int,sys.stdin.readline().split())

그럼 이거 내면 되는 거 아니냐? 아뇨 내가 그거 냈다가 틀렸어요… 뭐야 왜 틀려요? 왜는 왜야… 저거 꼭 세번째로 입력하는 게 빗변일거라는 보장 있음? 그래서 입력받고 정렬을 한번 한 다음 들어가야 한다.

import sys
while True:
  byeon = list(map(int,sys.stdin.readline().split()))
  if sum(byeon) == 0:
    break
  byeon.sort()
  if byeon[0] ** 2 + byeon[1] ** 2 == byeon[2] ** 2:
    print("right")
  else:
    print("wrong")

파이썬 리스트는 리스트 개별 인덱싱을 통해 0번째 1번째 이런 식으로 끌고 와서 계산하는 게 가능하다. 그래서 입력받고 한번 정렬해 준 다음 로직을 들어가면 된다. 정렬을 해 주게 되면 빗변이 맨 마지막이그덩.

응용편-삼각형 판별하기

사실 피타고라스의 정리를 이용하면 예각삼각형인지 둔각삼각형인지도 알 수 있다. 위에서 a^2+b^2=c^2 면 직각삼각형이라고 했는데 둔각삼각형은 c^2가 a^2+b^2보다 크고 예각삼각형은 그 반대이기 때문.

import sys
while True:
  byeon = list(map(int,sys.stdin.readline().split()))
  if sum(byeon) == 0:
    break
  byeon.sort()
  if byeon[0] ** 2 + byeon[1] ** 2 == byeon[2] ** 2:
    print("직각삼각형")
  elif byeon[0] ** 2 + byeon[1] ** 2 < byeon[2] ** 2:
    print("둔각삼각형")
  else: 
    print("예각삼각형")

참 쉽죠?