fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 1711 (C++) 직각삼각형
최초 업로드: 2025-04-13 11:47:45
최근 수정 시간: 2025-07-25 09:58:57
게시자: rlatjwls3333
카테고리: 백준
조회수: 8
# [Silver I] 직각삼각형 #### [문제 링크](https://www.acmicpc.net/problem/1711) ## 문제 설명 <p>2차원 평면에 N개의 점이 주어져 있다. 이 중에서 세 점을 골랐을 때, 직각삼각형이 몇 개나 있는지를 구하는 프로그램을 작성하시오.</p> ## 입력 <p>첫째 줄에 점의 개수 N(3 ≤ N ≤ 1,500)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 점의 x좌표와 y좌표가 빈 칸을 사이에 두고 주어진다. 좌표값은 절댓값이 1,000,000,000을 넘지 않는 정수이며, 주어지는 모든 점의 좌표는 다르다.</p> ## 출력 <p>첫째 줄에 직각삼각형의 개수를 출력한다.</p> ## 풀이 #### N은 최대 1500이고 모든 점을 탐색해본다 하더라도 1500 X 1500 X 1500 ≈ 5억 정도여서 5초 이내에 통과할 수 있습니다. ``` c++ #include<bits/stdc++.h> using namespace std; long long pos[1500][2]; inline bool isRight(int i, int j, int k) { long long aa = (pos[i][0]-pos[j][0])*(pos[i][0]-pos[j][0]) + (pos[i][1]-pos[j][1])*(pos[i][1]-pos[j][1]); long long bb = (pos[i][0]-pos[k][0])*(pos[i][0]-pos[k][0]) + (pos[i][1]-pos[k][1])*(pos[i][1]-pos[k][1]); long long cc = (pos[j][0]-pos[k][0])*(pos[j][0]-pos[k][0]) + (pos[j][1]-pos[k][1])*(pos[j][1]-pos[k][1]); return (aa+bb==cc || aa+cc==bb || bb+cc==aa); } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0;i<n;i++) cin >> pos[i][0] >> pos[i][1]; int cnt=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { for(int k=j+1;k<n;k++) { if(isRight(i, j, k)) cnt++; } } } cout << cnt; } ```