포시코딩

[프로그래머스][Lv.0] 평행 - 작성중 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.0] 평행 - 작성중

포시 2022. 12. 19. 12:29
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이

# 주어진 두 좌표를 이은 선분들이 서로 평행인지 확인하려면
# 그 선분을 포함한 직선의 일차함수를 구해 
# 서로의 기울기가 같으면 평행인 것을 활용하면 된다.
# y = ax + b라고 할 때, a는 기울기, b는 y절편이 되며
# 예시의 (1, 4), (3, 8)의 일차함수 y=2x+2와
# (9, 2), (11, 6)의 일차함수 y=2x-16의 기울기는 같으므로 평행이다.
# 두 좌표를 넣었을 때 기울기를 뱉는 함수를 만들어보자

def getSlope(e1, e2):
    # 4 = 1a + b, e1[1] = e1[0] * a + b
    # 8 = 3a + b, e2[1] = e2[0] * a + b

    # b = 4 - 1a, b = e1[1] - (e1[0] * a)
    # b = 8 - 3a, b = e2[1] - (e2[0] * a)

    # 4 - 1a = 8 - 3a, e1[1] - (e1[0] * a) = e2[1] - (e2[0] * a)

    # (3 - 1)a = 8 - 4,   (e2[0] - e1[0]) * a = e2[1] - e1[1]
    
    # a = 4/2, a = (e2[1] - e1[1]) / (e2[0] - e1[0])

    return (e2[1] - e1[1]) / (e2[0] - e1[0])


# 평행인지 확인하는 법을 알았으니 어떤 좌표끼리 묶을지도 구해야 하는데
# 배열의 인덱스로만 묶는다면
# 0,1 / 2,3
# 0,2 / 1,3
# 0,3 / 1,2
# 이렇게 되야한다. 문제에서는 dots의 길이와 원소의 길이를 정해줬지만 추후 나올 더 어려운 난이도에선 그 제한도 없을수도 있으므로
# 어떻게 해야 겹치지 않게 비교할 수 있을지를 생각해야한다.
# 일단 수동으로 먼저 해보자

def solution(dots):
    answer = 0
    if getSlope(dots[0], dots[1]) == getSlope(dots[2], dots[3]):
        answer = 1
    if getSlope(dots[0], dots[2]) == getSlope(dots[1], dots[3]):
        answer = 1
    if getSlope(dots[0], dots[3]) == getSlope(dots[1], dots[2]):
        answer = 1

    return answer

위 코드를 통해 두 좌표 a, b의 일차함수 기울기 공식은

(b[1] - a[1]) / (b[0] - a[0])

라는 것을 알 수 있다.

 

주어진 과제는 일단 수동으로 하나하나 dots의 두 좌표끼리 묶어 비교했는데

dots의 길이가 길어질 경우를 생각해 발전해야한다.

 

좀 더 생각해보고 다른 사람 풀이를 보도록 하자

 

다른 풀이

728x90