본문 바로가기
프로그래머스/Lv.0

평행 - Python, 기울기, 비구조화 할당

by 아찌방 2024. 11. 13.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120875?language=python3

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

풀이 - 나의 생각

점이 4개 밖에 없으니까

 

페어를 이룰 수 있는 경우를 모두 확인해서

 

평행인 경우가 있는지 찾으면 됩니다.

 

평행인 경우를 아는 방법은

 

점들이 주어졌을 때, 네 점을 이루는 모든 선분 쌍을 구성하여 기울기를 비교할 수 있습니다.

 

벡터 (x1,y1)(x2,y2)가 주어졌을 때, 두 벡터가 평행하려면 다음 조건이 성립해야 합니다.

 

x1 * y2 = x2 * y1

 

페어의 벡터 성분을 구한 후 위의 수식을 대입하면

 

평행하는지 알 수 있습니다.

 

 

 

밑의 코드는 리스트에 할당하는 방식이 처음 보는 방식이라 가져와 봤습니다.

 

비구조화 할당

 


1. 튜플/리스트 비구조화 할당

 

# 튜플 비구조화 할당
numbers = (1, 2, 3)
a, b, c = numbers

print(a)  # 1
print(b)  # 2
print(c)  # 3

 


2. 딕셔너리 비구조화 할당

 

# 딕셔너리에서 값 추출
person = {"name": "Alice", "age": 25}
name = person["name"]
age = person["age"]

print(name)  # Alice
print(age)   # 25

 

 

 

 

코드

 

def solution(dots):
    pairs = [
        (0, 1, 2, 3),
        (0, 2, 1, 3),
        (0, 3, 1, 2)
    ]
    
    for a, b, c, d in pairs:
        # 각 쌍의 벡터 성분을 계산
        x1, y1 = dots[a][0] - dots[b][0], dots[a][1] - dots[b][1]
        x2, y2 = dots[c][0] - dots[d][0], dots[c][1] - dots[d][1]
        
        # 평행한지 비교: x1 * y2 == x2 * y1
        if x1 * y2 == x2 * y1:
            return 1
`
    return 0

 

#Destructuring ,비구조화 할당, 구조분해
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

 

 

 

 

 

다음에 또 봐요

 

728x90