문제

[프로그래머스] 교점에 별 만들기 (LV. 2)

요약

  • 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])