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 |