파이썬 코딩테스트 강좌, 선분 방향 구하기

안녕하세요! 이번 포스팅에서는 파이썬을 이용한 코딩테스트 문제 중 하나인 “선분의 방향 구하기” 문제를 살펴보겠습니다. 본 문제를 통해 실질적인 문제 해결 능력을 기르고, 코딩테스트에서 자주 출제되는 기하학적 문제를 연습해보도록 하겠습니다.

문제 설명

두 점 A(x1, y1)와 B(x2, y2)가 주어질 때, 선분 AB와 선분 CD의 방향을 구하는 문제입니다. 선분 AB를 기준으로, 선분 CD의 방향을 구해 다음의 값을 출력하세요:

  • 1: 선분 CD가 선분 AB의 왼쪽에 있을 때
  • -1: 선분 CD가 선분 AB의 오른쪽에 있을 때
  • 0: 선분 CD와 선분 AB가 평행할 때

입력 형식

첫 번째 줄에는 점 A와 B의 좌표가 공백으로 구분되어 주어지며, 두 번째 줄에는 점 C와 D의 좌표가 공백으로 구분되어 주어집니다.

A의 x y 좌표: x1 y1
B의 x y 좌표: x2 y2
C의 x y 좌표: x3 y3
D의 x y 좌표: x4 y4

출력 형식

선분 CD의 방향을 나타내는 정수를 출력합니다.

문제 해결 접근법

본 문제를 해결하기 위해서는 먼저 선분 AB와 선분 CD의 방향 벡터를 구합니다. 방향 벡터는 다음과 같이 계산할 수 있습니다:

  • AB 벡터 = (x2 – x1, y2 – y1)
  • CD 벡터 = (x4 – x3, y4 – y3)

이어서, 두 벡터의 외적을 구하여 방향을 판단합니다. 외적의 결과 값에 따라 선분의 방향을 결정할 수 있습니다.

외적 계산

두 벡터 (x1, y1)와 (x2, y2)의 외적은 다음과 같이 계산됩니다:

cross_product = x1 * y2 - y1 * x2

이 값이 > 0이면 왼쪽, < 0이면 오른쪽, 0이면 평행입니다.

예제

예를 들어 A(1, 1), B(4, 4), C(4, 1), D(1, 4)가 주어진 경우, AB의 방향 벡터는 (3, 3)입니다. CD의 방향 벡터는 (-3, 3)입니다. 외적을 계산하면:

cross_product = (3 * 3) - (3 * -3) = 9 + 9 = 18 (따라서 선분 CD는 AB의 왼쪽에 위치합니다.)

코드 구현

이제 위의 과정을 바탕으로 파이썬 코드를 작성해 보겠습니다:

def direction(a, b, c, d):
    # 벡터 AB
    ab = (b[0] - a[0], b[1] - a[1])
    # 벡터 CD
    cd = (d[0] - c[0], d[1] - c[1])
    
    # 외적 계산
    cross_product = ab[0] * cd[1] - ab[1] * cd[0]
    
    if cross_product > 0:
        return 1    # 왼쪽
    elif cross_product < 0:
        return -1   # 오른쪽
    else:
        return 0    # 평행

# 입력 예시
a = (1, 1)
b = (4, 4)
c = (4, 1)
d = (1, 4)

# 함수 호출
result = direction(a, b, c, d)
print(result)

결과

위 코드를 실행하면, 선분 CD는 AB의 왼쪽에 위치하기 때문에 결과는 1이 됩니다.

마무리

이번 포스팅에서는 선분의 방향을 구하는 알고리즘 문제를 풀어보았습니다. 이 문제는 기하학적 사고를 필요로 하며 벡터 외적에 대한 이해가 중요합니다. 다양한 문제를 풀면서 이러한 기하학적인 문제를 익히고, 코딩테스트에서 좋은 결과를 거두시길 바랍니다!

추가적인 팁

  • 다양한 입력에 대해 충분히 테스트해보세요.
  • 문제를 이해하는 데 있어 시각적인 도표를 활용하면 좋습니다.
  • 외적의 결과를 통해 직접 시각적으로 디버깅해보세요.