프로그래머스

[프로그래머스] 평행 파이썬

띵지니어 2023. 2. 1. 22:26

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

 

프로그래머스

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

programmers.co.kr

 

내 코드

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

 

참고로 p1, p2, p3, p4 = dots[:4] 코드는 

dots 배열이 [[1, 4], [9, 2], [3, 8], [11, 6]]라고 가정할 때 변수에 하나씩 할당해 주는 코드입니다.

p1 = [1, 4]
p2 = [9, 2]
p3 = [3, 8]
p4 = [11, 6]


Review

 

처음 아이디어에서는

주어진 점(dots) 들을 정렬하고

순서대로 좌표 p1, p2, p3, p4라고 가정했을 때,

p3-p1 의 기울기와, p4-p2 기울기가 같으면 1을 출력하는 식으로 코드를 짰습니다.

아래는 단순하게 생각했을 때, 실패한 코드입니다.

# 실패한 코드 ❌

def solution(dots):

    dots = sorted(dots)
    if (dots[1][0] - dots[0][0]) == (dots[3][0] - dots[2][0]) and (dots[1][1] - dots[0][1]) == (dots[3][1] - dots[2][1]):
        return 1
    else:
        return 0

 

근데 역시나 간단하게 생각해서 그런지

당연한 결과

2개의 테케가 실패했습니다.

 

이후에는 두 직선의 기울기로 접근을 하였습니다.

모든 점들이 평행 사변형을 이루면서 직선이 되는 건 아니기에, 하나의 조건(2번 조건)을 더 추가해주었습니다.
평행사변형이거나 사다리꼴 모양이 되어야 평행 조건이 된다는 걸 알았습니다.

아래는 평행 사변형 모양으로 예시를 들었습니다.

사다리꼴 모양이라고 생각해도, 네 개의 직선 중, 두 직선의 기울기가 하나라도 같다면 평행 조건이 지켜지게 됩니다.
임의의 점 4개가 있을 때 위 성질에 적합하다면 1을 반환해 주도록 코드를 짰습니다.

gradient(p3, p1) == gradient(p4, p2) or gradient(p4, p3) == gradient(p2, p1) 이게 그 조건 입니다.

 

+ 24.01.02 수정