본문으로 바로가기

[Programmers] 평행

category Algorithm/Programmers 2022. 12. 12. 23:54
728x90
반응형

Description

점 네 개의 좌표를 담은 이차원 배열  dots가 다음과 같이 매개변수로 주어집니다.

  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 연결했을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.



Solve

문제를 읽었을 때 두 점 사이의 거리구나 하면서 직선의 방정식 어쩌고 가 불현듯 떠올랐다. 언제 배웠는지도 잘 기억 안 나는 내용이라 관련된 내용을 찾아보니 직선의 위치가 y의 기울기에 따라 "평행", "일치", "수직", "한 점에서 만난다"라는 조건이 있어서 이에 해당하는 조건을 코드로 구현하면 통과하겠거니 했는데 예상과 달랐다. 처음 생각했던 접근법은 단순히 두 점 사이의 거리이다. 즉 평행인 경우와 일치하는 경우에 대해 기울기가 같다고 하니 다음과 같은 모양이 되지 않을까 했다.

조잡하지만 선 모양에 따라서 대충 무엇을 말하려 하는지는 알 수 있을 것이다. 그런데 위의 케이스만 생각해서 코드를 짰더니 통과하지 못했다. 두 점을 이을 수 있는 방법이 위의 케이스 말고 다른 게 있나 생각해봤는데 잘 풀리지 않아 풀이를 참고했더니 다음과 같은 케이스를 새로 생각할 수 있었다.

 

 

Code

Code는 위 케이스에 맞게 각 점을 연결 지어 기울기를 구한 다음 같은 경우에만 1을 리턴하고 그 밖에는 0을 리턴하니 풀렸다.

def slope(p2, p1):
    x2_x1 = p2[0] - p1[0]
    y2_y1 = p2[1] - p1[1]

    return y2_y1 / x2_x1


def solution(dots):
    p1 = dots[0:2]
    p2 = dots[2:]

    x1, x2 = p1[0][0], p1[1][0]
    y1, y2 = p1[0][1], p1[1][1]

    x3, x4 = p2[0][0], p2[1][0]
    y3, y4 = p2[0][1], p2[1][1]

    p1 = (x1, y1)
    p2 = (x2, y2)

    p3 = (x3, y3)
    p4 = (x4, y4)

    if slope(p2, p1) == slope(p4, p3):
        return 1
    if slope(p4, p2) == slope(p3, p1):
        return 1
    if slope(p4, p1) == slope(p3, p2):
        return 1

    return 0

 

 

728x90
반응형

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers] 올바른 괄호  (0) 2023.01.15
[Programmers] 최댓값과 최솟값  (0) 2023.01.08
[Programmers] 7의 갯수 구하기  (0) 2022.12.08
[Programmers] 옹알이 - 다시 풀어보기  (0) 2022.12.07
[Programmers] 옹알이  (0) 2022.12.06