본문 바로가기

코테 공부/python

[프로그래머스] Python 평행

https://school.programmers.co.kr/learn/courses/30/lessons/120875

나의 코드

기울기 구하는 함수 두고 매 케이스 기울기 비교하는 방식으로 짰는데

def solution(dots):
    answer = 0
    if incline(dots[0], dots[1]) == incline(dots[2], dots[3]):
        return 1
    if incline(dots[0], dots[2]) == incline(dots[1], dots[3]):
        return 1
    if incline(dots[0], dots[3]) == incline(dots[1], dots[2]):
        return 1
    return answer

def incline(li1, li2):
    return (li1[1] - li2[1]) / (li1[0] - li2[0])

타 풀이 코드

분명 더 효율적인 방법이 있을 텐데.. 하고 보니 이런게 있었고

combination으로 저렇게 받아올 수 있구나 싶어서 파이썬 짱이다.. 했다

돌려봤는데 통과를 못했다...

from itertools import combinations

def solution(dots):
    li = []
    
    for (x1,y1),(x2,y2) in combinations(dots,2):
        li.append((y2-y1,x2-x1))

    for (dy1,dx1),(dy2,dx2) in combinations(li,2):
        if dy1*dx2==dy2*dx1:
            return 1
            
    return 0

combination으로 받아오는 dots 들이 1, 2 이면 남은 3, 4와 비교해야하는데 여기서 1, 2 와 1, 3 을 비교하는 식으로 중복 체크가 없다보니 케이스 몇개를 통과 못한듯 하다

이런거 보면.. 그냥 구현 그자체가 실수하는 케이스 잡아내기 쉬운거 같긴한데

이런 방법조차도 잘해내야..!!!!

근데 나누기보다 곱하기가 더 효율적인가? 에러의 여지가 더 많나 왜 많이들 기울기 식 그대로 나누기 안하고 곱하기 해서 하나..

요것도 좋았다.

분화만이 답은 아닌것을...

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