문제
요약
- Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그린다.
- 모든 별을 포함하는 최소 사각형을 반환하자.
분류
- 배열?
풀이
1. 내 풀이
- 발상 : 그냥 푼다.
import sys
def solution(line):
min_x = sys.maxsize; min_y = sys.maxsize
max_x = - sys.maxsize; max_y = - sys.maxsize
meets = set()
for i in range(len(line) - 1):
for j in range(i + 1, len(line)):
A, B, E = line[i]
C, D, F = line[j]
if A * D - B * C == 0:
continue
if int((B * F - E * D) / (A * D - B * C)) != (B * F - E * D) / (A * D - B * C) or int((E * C - A * F) / (A * D - B * C)) != (E * C - A * F) / (A * D - B * C):
continue
meet = (int((B * F - E * D) / (A * D - B * C)), int((E * C - A * F) / (A * D - B * C)))
meets.add(meet)
for x, y in meets:
min_x = min(min_x, x); max_x = max(max_x, x)
min_y = min(min_y, y); max_y = max(max_y, y)
arr = [['.'] * (max_x - min_x + 1) for _ in range(max_y - min_y + 1)]
for x, y in meets:
nx = x + abs(min_x) if min_x < 0 else x - min_x
ny = y + abs(min_y) if min_y < 0 else y - min_y
arr[ny][nx] = '*'
ans = []
for val in arr:
ans.append(''.join(val))
return(ans[::-1])