알고리즘 풀이

[알고리즘] 프로그래머스 | 평행

째깍단 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])