점 네 개의 좌표를 담은 이차원 배열
dots 가 다음과 같이 매개변수로 주어집니다.
• [x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
dots 의 길이 = 4
dots 의 원소는 [X, y] 형태이며 x, y는 정수입니다.
( 0 ≤ x, y ≤ 100 )
서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.
dots
[[1, 4], [9, 2], [3, 81, [11, 61][3, 5], [4, 1], [2, 4], [5, 101]
result 0
def solution(dots):
answer = 0
# 가능한 모든 조합의 기울기를 비교
for i in range(len(dots)):
for j in range(i + 1, len(dots)):
x1,y1 = dots[i]
x2,y2 = dots[j]
scope1 = (y2-y1) / (x2-x1)
remaining = [dots[k] for k in range(len(dots)) if k != i and k != j]
x3, y3 = remaining[0]
x4, y4 = remaining[1]
scope2 = (y4-y3) / (x4-x3)
if scope1 == scope2:
answer = 1
return answer
내가 간과한 사실 : 만약 기울기가 같더라도 같은 점을 가지고 나온 선이면 안됨.
만약에 (1)(3) 이랑 (2)(3) 의 점으로 만든 선이 평행하다고 친다면, error
"네개의 점을 두개씩이었을 때, 해당 두 직선이 평행이 되는 경우의 수"
def solution(dots):
answer = 0
gradient = []
# 비교한 값들을 리스트에서 삭제
# 그 뒤 동일한 값이 있으면 1.
for i in range(3):
dots_copy = dots
for j in range(3-i):
print(3-i,j)
x = dots_copy[3-i][0] - dots_copy[j][0]
y = dots_copy[3-i][1] - dots_copy[j][1]
gradient.append(y/x)
print(gradient)
gradient_copy = gradient
for k in range(5):
gradient_copy = gradient
num = gradient_copy[-1]
gradient_copy.pop()
print("비교 num", num)
print("gradient_copy", gradient_copy)
if num in gradient_copy:
answer = 1
return answer
비구조화 할당, 구조분해
def solution(dots):
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]=dots
answer1 = ((y1-y2)*(x3-x4) == (y3-y4)*(x1-x2))
answer2 = ((y1-y3)*(x2-x4) == (y2-y4)*(x1-x3))
answer3 = ((y1-y4)*(x2-x3) == (y2-y3)*(x1-x4))
return 1 if answer1 or answer2 or answer3 else 0
생각해보니 x,y쌍이 4개뿐이면 경우의 수가 3가지밖에 안된다는 것을...
간단한 문제를 되돌아간 기분