https://www.acmicpc.net/problem/1711
1711번: 직각삼각형
첫째 줄에 점의 개수 N(3 ≤ N ≤ 1,500)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 점의 x좌표와 y좌표가 빈 칸을 사이에 두고 주어진다. 좌표값은 절댓값이 1,000,000,000을 넘지 않는 정수이며, 주
www.acmicpc.net
문제분석
직각삼각형이 가능한 점들로 만들 수 있는 직각삼각형 갯수를 구하면 되는 단순한 문제이다.
해결과정
피타고라스 정리를 활용하였으며, 시간을 최대한 줄이기 위해 한번씩만 탐색하도록 하였다.
dotcount=int(input())
arr=[]
for i in range(dotcount):
arr.append(list(map(int,input().split())))
arr_steepness=[]
#i점과 k, j점으로 직각삼각형이 만들어지는지(만들어지면 카운트)
count=0
for i in range(len(arr)-2):#arr[i][0] arr[i][1]
for k in range(i+1,len(arr)-1):#arr[k][0] arr[k][1]
for j in range(k+1,len(arr)):#arr[j][0] arr[j][1]
a=(arr[k][0]-arr[i][0])**2+(arr[k][1]-arr[i][1])**2
b=(arr[j][0]-arr[i][0])**2+(arr[j][1]-arr[i][1])**2
c=(arr[k][0]-arr[j][0])**2+(arr[k][1]-arr[j][1])**2
if a==b+c or b==a+c or c==a+b:
count+=1
print(count)
시간 복잡도를 더 줄이는 획기적인 방법도 있을 것 같으나, pypy3으로 제출하면 시간 내에 해결되서 딱히 찾지 않았다.
'알고리즘&백준' 카테고리의 다른 글
[Python] 백준 1041 주사위 (2) | 2024.01.05 |
---|---|
[Python] 백준 2493 탑 (2) | 2024.01.05 |
[Python] 백준 2591 숫자카드 (0) | 2023.11.06 |
[Python] 백준 2565 전깃줄 (0) | 2023.11.03 |
[Python]백준 2590 색종이 (3) | 2023.10.30 |