[프로그래머스] 평행 파이썬
https://school.programmers.co.kr/learn/courses/30/lessons/120875
내 코드
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 수정