본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(코딩테스트 입문) : 평행

반응형

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

 

프로그래머스

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

programmers.co.kr

기울기를 구해본 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

가능한 선분 쌍 pairs를 선언해 나올 수 있는 선분쌍의 조합을 좌표의 tuple형태로 저장해줍니다.

📔 풀이과정

각 pairs의 tuple에 대해 for loop를 수행하면서 다음을 수행합니다.1. 첫 번째 선분의 기울 기를 각 x, y좌표의 차이를 최대공약수로 나눠 저장합니다.2. -1 / 1과 1 / -1 이 평행하지 않음에 주의해 부호를 x가 음수라면 부호를 바꿔 저장합니다.3. 마찬가지로 두 번째 선분의 기울기와 부호를 갱신해줍니다.4. 기울기가 찾으면 평행하므로 1을 반환합니다.* devide by zero때문에 x와 y를 따로 지역변수 형태로 선언해 비교했습니다.

📔 정답 출력 | 반환

평행한 직선이 없으므로 0을 반환합니다.


📕 Code

📔 Python3

def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)

def solution(dots):
    # 가능한 모든 선분 쌍의 조합을 검사
    pairs = [
        (dots[0], dots[1], dots[2], dots[3]),
        (dots[0], dots[2], dots[1], dots[3]),
        (dots[0], dots[3], dots[1], dots[2])
    ]
    
    for (p1, p2, p3, p4) in pairs:
        # 첫 번째 선분의 기울기
        dx1, dy1 = p2[0] - p1[0], p2[1] - p1[1]
        gcd1 = gcd(abs(dx1), abs(dy1))
        dx1 //= gcd1
        dy1 //= gcd1
        
        # 기울기를 양수 방향으로 통일
        if dx1 < 0:
            dx1, dy1 = -dx1, -dy1
        
        # 두 번째 선분의 기울기
        dx2, dy2 = p4[0] - p3[0], p4[1] - p3[1]
        gcd2 = gcd(abs(dx2), abs(dy2))
        dx2 //= gcd2
        dy2 //= gcd2
        
        if dx2 < 0:
            dx2, dy2 = -dx2, -dy2
        
        # 기울기가 같으면 평행
        if (dx1, dy1) == (dx2, dy2):
            return 1
    
    # 평행한 직선이 없으면 0 반환
    return 0

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.