자료구조, 알고리즘

프로그래머스 스쿨 코딩테스트 입문: 평행

수수 아보카도 2022. 12. 22. 17:51

네 개의 점이 주어졌을 때 두 점씩 이은 두 직선이 평행이 되는 경우가 있는지 알아보는 문제.

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

첫번째 풀이방법으로는 기울기를 a로 두고 기울기가 같은 애가 있는지 알아봤다.

def solution(dots):
    ang = []
    for i in range(3):
        for j in range (i+1, 4):
            x= dots[i][0] - dots[j][0]
            y= dots[i][1] - dots[j][1]

            a = y/x if x!=0 else -1
            if a not in ang:
                ang.append(a)
            else:
                return 1
    return 0

 

두번째 풀이방법으로는 combinations이라는 함수를 사용해서 for문의 범위에 combinations를 사용했다.

각각 두 점의 조합을 만들어서 a의 배열에 더해준 다음, 이 a 조합에서 기울기가 같은 애들이 있는지 확인한다.

from itertools import combinations


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

    for (x1,y1),(x2,y2) in combinations(a,2):
        if x1*y2 == x2*y1:
            return 1
    return 0