문제

https://www.acmicpc.net/problem/4153

 

4153번: 직각삼각형

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

www.acmicpc.net

피타고라스 정리가 성립하는 지 확인하면 되는 매우 간단한 문제. 간단한데 정답률이 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("예각삼각형")

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 2447번 풀이  (0) 2022.08.19
백준 17478번 풀이  (0) 2022.08.19
백준 1002번 풀이  (0) 2022.08.19
백준 10870번 풀이  (0) 2022.08.19
백준 10872번 풀이  (0) 2022.08.19

Profile

Lv. 34 라이츄

요즘 날씨 솔직히 에바참치김치꽁치갈치넙치삼치날치기름치준치학꽁치임..