문제

https://school.programmers.co.kr/learn/courses/30/lessons/120876?language=python3

풀이

시도 1

dots에 대한 조합을 구하고 나올수 있는 기울기를 구한다음에 기울기가 중복이 된 경우 평행이라고 가정하였으나, 67/100으로 탈락

모든 조합을 구한 경우 AB직선과 BC직선은 비교할 필요가 없는데 비교하게 되어 탈락한 것 같다.

solution.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def solution(dots):
    from itertools import combinations

    slopes = []
    for i in combinations(dots, 2):
        if i[1][0] - i[0][0] != 0:
            slope = (i[1][0] - i[0][0]) / (i[1][1] - i[0][1])
            if slope in slopes:
                return 1
            else:
                slopes.append(slope)
    return 0

시도 2

각 원소에대한 기울기를 직접 구해서 진행하여 solved

solution.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def gradient(a, b):
    return (a[1] - b[1]) / (a[0] - b[0])


def solution(dots):
    p1, p2, p3, p4 = dots[:4]
    if gradient(p3, p1) == gradient(p4, p2) or gradient(p4, p3) == gradient(p2, p1):
        return 1
    else:
        return 0

다른사람풀이

solution.py
1
2
3
4
5
6
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