https://www.acmicpc.net/problem/20943
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
from sys import *
from math import *
def nC2(n):
return n * (n - 1) // 2
users = dict()
n = int(stdin.readline())
vertical = 0
for i in range(n):
a, b, c = map(int, stdin.readline().split())
if b == 0:
vertical += 1
else:
try:
users[-a / b] += 1
except KeyError:
users[-a / b] = 1
Sum = nC2(n) - nC2(vertical)
for key in users.keys():
Sum -= nC2(users[key])
print(Sum)
|
cs |
어떤 두 직선의 쌍 중에서 평행하지 않은 쌍의 개수를 구하는 문제라고 보면 된다.
그래서 기울기(-a/b)를 key로 하는 딕셔너리를 사용했는데 b=0인 경우, 즉 y축에 평행한 직선인 경우 0으로 나누는
오류가 발생해서 vertical이라는 별도의 변수를 이용해서 체크했다.
전체 경우는 n개의 직선 중에서 2개를 선택하는 경우라고 할 수 있다.
남은 일은 전체 경우에서 각각의 기울기에 해당하는 직선 중에서 2개를 선택하는 경우를 빼주면 된다.
솔직히 소수점 연산은 오차가 있어서 틀릴 줄 알았는데 맞아서 신기했다,,, (튜플로 만드는 게 더 정확할 듯)
'백준 온라인 저지 (BOJ) 문제풀이' 카테고리의 다른 글
백준 온라인 저지 14499 주사위 굴리기 (0) | 2021.03.24 |
---|---|
백준 온라인 저지 12018 Yonsei TOTO (0) | 2021.03.11 |
백준 온라인 저지 20937 떡국 (0) | 2021.03.01 |
백준 온라인 저지 2143 두 배열의 합 (0) | 2021.02.26 |
백준 온라인 저지 16397 탈출 (0) | 2021.02.25 |