지원연구소 공식 블로그

[PROGRAMMERS] 평행 (LV. 0) - Python 본문

코딩테스트/프로그래머스

[PROGRAMMERS] 평행 (LV. 0) - Python

지원연구소 2024. 5. 2. 03:50

[ 문제 ]

점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.

- [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

 

 

 

[ 제한사항 ]

  • dots의 길이 = 4
  • dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
    • 0 ≤ x, y ≤ 100
  • 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
  • 두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
  • 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.

 

 

[ 입출력 예 ]

dots result
[[1, 4], [9, 2], [3, 8], [11, 6]] 1
[[3, 5], [4, 1], [2, 4], [5, 10]] 0

 

< 입출력 예 #1 >

  • 점 [1, 4], [3, 8]을 잇고 [9, 2], [11, 6]를 이으면 두 선분은 평행합니다.

< 입출력 예 #2 >

  • 점을 어떻게 연결해도 평행하지 않습니다.

 

 

[ 해결 방법 ]

1. 연결된 각 직선의 기울기를 담는 변수 line1과 상대 기울기를 담는 변수 line2 선언
2. i와 j를 통해 전에 선택된 선택인지 확인하고 선택된 선택이라면 continue로 건너뛰고 선택되지 않으면 line1에 기울기 할당
3. m과 n을 통해 반복하여 민희진이 선택한 코디 제외하고 나머지 두 수의 기울기를 line2에 저장하면서 반복 진행
4. 만약 line1과 line2가 같다면 1반환, 아니면 0반환 

 

 

 

[ solution.py ]

def solution(dots):
    answer = []
    line1 = 0
    line2 = 0
    
    for i in dots:
        for j in dots:
            if i == j:
                continue
            else:
                line1 = (i[1] - j[1]) / (i[0] - j[0])
            for m in dots:
                if m == i or m == j:
                    continue
                for n in dots:
                    if n == m or n == i or n == j:
                        continue
                    else:
                        line2 = (m[1] - n[1]) / (m[0] - n[0])
                        if line1 == line2:
                            return 1
                        
    return 0

 

 

 

> 🌻피드백은 언제나 환영입니다🌻 <