<로직 고민>
- 그림을 그려봤다
- 보니까 .. 두 점의 x좌표 간 거리와 y좌표 간 거리가 같으면 평행인 것 같다
- 근데 그걸 어떻게 찾지...?
def solution(dots):
if abs(dots[0][0]-dots[1][0]) == abs(dots[2][0]-dots[3][0]):
if abs(dots[0][1]-dots[1][1]) == abs(dots[2][1]-dots[3][1]):
return 1
if abs(dots[0][0]-dots[2][0]) == abs(dots[1][0]-dots[3][0]):
if abs(dots[0][1]-dots[2][1]) == abs(dots[1][1]-dots[3][1]):
return 1
if abs(dots[0][0]-dots[3][0]) == abs(dots[1][0]-dots[2][0]):
if abs(dots[0][1]-dots[3][1]) == abs(dots[1][1]-dots[2][1]):
return 1
return 0
- 일단 무식하게 짜봤다
- 1,2번째 점의 x좌표 간 거리와 3,4번째 점의 x좌표 간 거리가 일치하는 경우에 y좌표도 그렇다면 1 리턴
- 그다음은 1,3번째와 2,4번째 비교
- 그다음은 1,4번째와 2,3번째 비교
- 인데...
- 테스트1과 10에서 실패한다
- 뭔가 선이 일치하는 경우일 것 같은데....
- 아 아니면 abs를 붙이지 않는 게 좋을 것 같기도 하다
- 좌표 간 거리가 음수인 경우 똑같이 음수여야 평행일 듯?!
def solution(dots):
if (dots[0][0]-dots[1][0]) == (dots[2][0]-dots[3][0]):
if (dots[0][1]-dots[1][1]) == (dots[2][1]-dots[3][1]):
return 1
if (dots[0][0]-dots[2][0]) == (dots[1][0]-dots[3][0]):
if (dots[0][1]-dots[2][1]) == (dots[1][1]-dots[3][1]):
return 1
if (dots[0][0]-dots[3][0]) == (dots[1][0]-dots[2][0]):
if (dots[0][1]-dots[3][1]) == (dots[1][1]-dots[2][1]):
return 1
return 0
- 아닌가보다...테스트5도 실패로 떴다
- abs는 다시 붙인다....
- 근데 선이 겹치는 경우는 좌표 거리가 다 0으로 if문을 잘 통과할 거 같은데 뭐가 문제인 걸까.....흠
- 잊고 있었는데...뭐가 문제일까 싶어 구글링 하다보니....
- 평행한 직선은 기울기가 같다는 걸 알아냈다,,ㅋㅋㅋ
- 기울기를 구해야 하는군....
- 찾아보니 기울기를 구하는 식은 x좌표의 증가량 / y좌표의 증가량이라고 한다
- 코드를 살짝 수정하면 될 것 같다
- 좀 무식하게 풀었는데 17점이나 주다니...ㄷㄷ
<완성된 코드>
def solution(dots):
if ((dots[0][0] - dots[1][0]) / (dots[2][0] - dots[3][0])) == (
(dots[0][1] - dots[1][1]) / (dots[2][1] - dots[3][1])
):
return 1
if ((dots[0][0] - dots[2][0]) / (dots[1][0] - dots[3][0])) == (
(dots[0][1] - dots[2][1]) / (dots[1][1] - dots[3][1])
):
return 1
if ((dots[0][0] - dots[3][0]) / (dots[1][0] - dots[2][0])) == (
(dots[0][1] - dots[3][1]) / (dots[1][1] - dots[2][1])
):
return 1
return 0
<다른 사람 풀이>
- 천재풀이1
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
- 와 이렇게 값을 넣을 수가 있구나
- 근데 식은 이해가 잘 안 가넹...이건 기울기를 구한 게 아닌가.....?
def solution(dots):
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]=dots
if ((x1 - x2) / (x3 - x4)) == ((y1 - y2) / (y3 - y4)):
return 1
if ((x1 - x3) / (x2 - x4)) == ((y1 - y3) / (y2 - y4)):
return 1
if ((x1 - x4) / (x2 - x3)) == ((y1 - y4) / (y2 - y3)):
return 1
return 0
- 이 풀이대로 내 풀이를 바꿔봤다 훨씬 보기가 좋군...!
- answer에도 담아볼까...?
- 기울기가 일치하면 answer에 1이 담기고 일치하지 않으면 0이 담긴다
def solution(dots):
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]] = dots
answer1 = ((x1 - x2) / (x3 - x4)) == ((y1 - y2) / (y3 - y4))
answer2 = ((x1 - x3) / (x2 - x4)) == ((y1 - y3) / (y2 - y4))
answer3 = ((x1 - x4) / (x2 - x3)) == ((y1 - y4) / (y2 - y3))
return 1 if answer1 or answer2 or answer3 else 0
- answer 중 하나라도 True이면(=1이 있으면) 1이 반환되고 모두 False이면(=0이면) 0이 반환됨
- 좋네..!!!
<수정>
- 마지막에 작성한 풀이는 dots=[[1, 0], [0, 1], [1, 2], [2, 1]]인 경우 answer2에서 ZeroDivisionError: division by zero 에러가 뜬다
- 해당 케이스는 무조건 평행일 수 없으므로 위 에러가 뜨면 그냥 지나가게 하면 될 것 같다
def solution(dots):
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]] = dots
try:
answer1 = ((x1 - x2) / (x3 - x4)) == ((y1 - y2) / (y3 - y4))
answer2 = ((x1 - x3) / (x2 - x4)) == ((y1 - y3) / (y2 - y4))
answer3 = ((x1 - x4) / (x2 - x3)) == ((y1 - y4) / (y2 - y3))
except:
pass
return 1 if answer1 or answer2 or answer3 else 0