반응형
https://school.programmers.co.kr/learn/courses/30/lessons/120875
기울기를 구해본 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
가능한 선분 쌍 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
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Implementation' 카테고리의 다른 글
(Python3) - 프로그래머스(코딩테스트 입문) : 삼각형의 완성조건 (2) (0) | 2024.11.03 |
---|---|
(Python3) - 프로그래머스(코딩테스트 입문) : 다항식 더하기 (0) | 2024.11.03 |
(Python3) - 프로그래머스(코딩테스트 입문) : 유한소수 판별하기 (0) | 2024.11.03 |
(Python3) - 프로그래머스(코딩테스트 입문) : 등수 매기기 (1) | 2024.11.03 |
(Python3) - 프로그래머스(코딩테스트 입문) : 로그인 성공? (0) | 2024.11.03 |