내코드
def solution(dots):
def angle(dot1, dot2):
x1, y1 = dot1
x2, y2 = dot2
return (y2 - y1) / (x2 - x1)
lines = [
(0, 1, 2, 3),
(0, 2, 1, 3),
(0, 3, 1, 2),
]
for i, j, k, l in lines:
if angle(dots[i], dots[j]) == angle(dots[k], dots[l]):
return 1
return 0
코드설명
- 기울기 계산 함수:
angle(dot1, dot2)는 두 점의 좌표를 받아 기울기를 계산합니다.- 수식: (y2−y1)/(x2−x1)(y2 - y1) / (x2 - x1)
- 주어진 문제에서 x2−x1=0x2 - x1 = 0인 경우는 없으므로 별도 예외 처리가 필요 없습니다.
- 선분 조합:
lines에 가능한 세 가지 선분 조합을 정의합니다.- 예: (dots[0],dots[1])(dots[0], dots[1])와 (dots[2],dots[3])(dots[2], dots[3])
- 평행 조건:
두 선분의 기울기가 같다면 평행이므로 바로 1을 반환합니다. - 최종 반환:
모든 조합을 확인했음에도 평행한 직선이 없다면 0을 반환합니다.
특징
- 선분 조합을 미리 정의하여 반복문으로 간단히 처리합니다.
- 직관적이고 가독성이 높은 방식으로 구현되었습니다.
다른 코드
def solution(dots):
from itertools import combinations
return int(any(
(y2 - y1) * (x4 - x3) == (y4 - y3) * (x2 - x1)
for (x1, y1), (x2, y2), (x3, y3), (x4, y4) in combinations(dots, 4)
))
코드설명
- 조합 생성:
itertools.combinations를 사용하여 점 4개에서 두 점씩 두 쌍의 선분을 만듭니다.- 총 가능한 경우의 수는 (44)=1\binom{4}{4} = 1.
- 평행 조건:
두 선분의 외적이 0이면 평행합니다.- 수식: (y2−y1)×(x4−x3)==(y4−y3)×(x2−x1)(y2 - y1) \times (x4 - x3) == (y4 - y3) \times (x2 - x1)
- 결과 반환:
조건을 만족하는 경우 1, 그렇지 않으면 0을 반환합니다.
특징
- 간결한 코드로 구현되었습니다.
- any()를 사용하여 조건을 만족하는 경우 즉시 반환합니다.
- 외적을 활용해 계산 정확도를 높였습니다.
두 코드 비교
- 내 코드:
- 선분 조합을 미리 정의하여 직관적이고 가독성이 좋습니다.
- 반복문을 사용해 간단하게 동작합니다.
- 다른 코드:
- 모든 가능한 선분 조합을 동적으로 생성합니다.
- 한 줄의 표현식으로 간결함을 극대화했습니다.
- 외적 방식을 사용하여 연산 오차를 최소화했습니다.
결론
두 코드 모두 문제를 해결하지만, 가독성과 간결성에서 선택이 갈릴 수 있습니다.
- 가독성을 중시한다면 첫 번째 코드가 적합합니다.
- 창의적이고 간결한 코드를 선호한다면 두 번째 코드가 좋습니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 옹알이 (1) (0) | 2025.01.23 |
---|---|
프로그래머스 | Python | 겹치는 선분의 길이 (1) | 2025.01.21 |
프로그래머스 | Python | 안전지대 (1) | 2025.01.20 |
프로그래머스 | Python | 연속된 수의 합 (2) | 2025.01.17 |
프로그래머스 | Python | 다음에 올 숫자 (0) | 2025.01.17 |