본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬 / 자바스크립트] 평행(코딩테스트 입문 / level 0)

by 청량리 물냉면 2023. 3. 16.
반응형
문제

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

 

프로그래머스

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

programmers.co.kr

 

 

🐍파이썬
def solution(dots):
    if (dots[0][1] - dots[1][1]) / (dots[0][0] - dots[1][0]) == (dots[2][1] - dots[3][1]) / (dots[2][0] - dots[3][0]) or (dots[0][1] - dots[2][1]) / (dots[0][0] - dots[2][0]) == (dots[1][1] - dots[3][1]) / (dots[1][0] - dots[3][0]) or (dots[0][1] - dots[3][1]) / (dots[0][0] - dots[3][0]) == (dots[1][1] - dots[2][1]) / (dots[1][0] - dots[2][0]):
        return 1
    return 0

평행인 직선은 기울기가 동일하다.

직선의 기울기 = (y2 - y1) / (x2 - x1) (y축 증가량 / x축 증가량)

4가지 직선이므로 3가지 조합, 즉 인덱스 0, 1 / 2, 3  0, 2 / 1, 30, 3 / 1, 2 이 세 가지 조합의 기울기를 구하고, 두 직선의 기울기가 동일하면 1을, 그렇지 않으면 0을 리턴하도록 하였다.

 

 

다른 풀이 방법

def solution(dots):
    [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]=dots
    # 인덱스 1, 2 y축 증가량 * 인덱스 3, 4 x축 증가량 == 인덱스 3, 4 y축 증가량 * 인덱스 1, 2 x축 증가량
    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))
    #answer1,2,3 중 하나라도 1이면 1리턴, 아니면 0리턴
    return 1 if answer1 or answer2 or answer3 else 0

 

 

🐥자바스크립트
function solution(dots) {
    return (dots[0][1] - dots[1][1]) / (dots[0][0] - dots[1][0]) == (dots[2][1] - dots[3][1]) / (dots[2][0] - dots[3][0]) || (dots[0][1] - dots[2][1]) / (dots[0][0] - dots[2][0]) == (dots[1][1] - dots[3][1]) / (dots[1][0] - dots[3][0]) || (dots[0][1] - dots[3][1]) / (dots[0][0] - dots[3][0]) == (dots[1][1] - dots[2][1]) / (dots[1][0] - dots[2][0]) ? 1 : 0;
}

파이썬 풀이와 동일하게 직선의 기울기를 이용하여 풀고 삼항연산자를 사용해 1 또는 0을 리턴했다.

 

 

다른 풀이 방법

function solution(dots) {
    if (calculateSlope(dots[0], dots[1]) === calculateSlope(dots[2], dots[3]))
        return 1;
    if (calculateSlope(dots[0], dots[2]) === calculateSlope(dots[1], dots[3]))
        return 1;
    if (calculateSlope(dots[0], dots[3]) === calculateSlope(dots[1], dots[2]))
        return 1;
    return 0;
}

function calculateSlope(arr1, arr2) {
    return (arr2[1] - arr1[1]) / (arr2[0] - arr1[0]);
}

 

반응형