알고리즘 풀이
[알고리즘] 프로그래머스 | 평행
째깍단
2023. 8. 2. 21:47
답:
더보기
def solution(dots):
# 점 12 34
if (dots[0][1] - dots[1][1])/(dots[0][0] - dots[1][0]) == (dots[2][1] - dots[3][1])/(dots[2][0] - dots[3][0]):
return 1
# 점 13 24
if (dots[0][1] - dots[2][1])/(dots[0][0] - dots[2][0]) == (dots[1][1] - dots[3][1])/(dots[1][0] - dots[3][0]):
return 1
# 점 14 23
if (dots[0][1] - dots[3][1])/(dots[0][0] - dots[3][0]) == (dots[1][1] - dots[2][1])/(dots[1][0] - dots[2][0]):
return 1
return 0
무언가 아름다워서 받아 적어두었다.
def gradient(a, b):
return (a[1] - b[1]) / a[0] - b[0]
def solution(dots):
answer = 0
line = []
#dots 조합 정리
x1, y1 = dots[0][0], dots[0][1]
x2, y2 = dots[1][0], dots[1][1]
x3, y3 = dots[2][0], dots[2][1]
x4, y4 = dots[3][0], dots[3][1]
p1 = (x1, y1)
p2 = (x2, y2)
p3 = (x3, y3)
p4 = (x4, y4)
#dots의 원소에 대한 x좌표와 y좌표의 차이로 기울기 구하기
#기울기 y의 값의 증가량을 x의 값의 증가량으로 나눈 값
if gradient(p3, p1) == gradient(p4, p2):
return 1
if gradient(p4, p3) == gradient(p2, p1):
return 1
if gradient(p4, p1) == gradient(p3, p2):
return 1
else:
return 0
문제 분석 및 해석
dots [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
점을 두개씩 이었을때 평행이 되는 경우가 있으면 1, 없으면 0을 return
=> 1개라도 평행이면 1, 없으면 0
두 직선이 겹치는 경우도 1
>> 풀이 생각
12 34
13 24
14 23
이렇게 이었을때 평행인 선분이 나오는지 확인
"기울기"를 떠올려 계산 방법을 검색했다.
x좌표끼리 뺀 값 / y 좌표끼리 뺀 값 으로 기울기를 계산하여 같은지 확인하는 과정을 거침
itertools의 combination을 써볼까 했지만 필요한 케이스가 너무 적고,
2번의 조합과정을 거쳐야하는 것을 고려하여
그냥 불러와서 사용하는 방법을 택하였음
1차 조합시 나오는 결과 :
([1, 4], [9, 2])
([1, 4], [3, 8])
([1, 4], [11, 6])
([9, 2], [3, 8])
([9, 2], [11, 6])
([3, 8], [11, 6])