문제 가장 밑에 교점을 구하는 공식이 있다.
line의 데이터 범위는 1000개 이기 때문에 완전 탐색으로 교점을 찾아도 괜찮다.
교점을 전부 찾은 후, 가로의 길이와 세로의 길이를 구한다
세로의 길이 중 가장 큰 값을 기준 0 으로 삼고 행으로 index 값을 바꾼다
가로의 길이 중 가장 작은 값을 기준 0 으로 삼고 열로 index 값을 바꾼다
방문 배열을 만들어 교점인 곳을 True로 설정하고 루프 돌면서 정답 출력!
def solution(line):
answer = []
cross = []
for i in range(len(line)):
for j in range(i + 1, len(line)):
a, b, e = line[i]
c, d, f = line[j]
ad_bc = a * d - b * c
bf_ed = b * f - e * d
ec_af = e * c - a * f
if ad_bc != 0:
if bf_ed % ad_bc == 0 and ec_af % ad_bc == 0:
cross.append((bf_ed // ad_bc, ec_af // ad_bc))
cross_sero = sorted(cross, key = lambda x : x[1])
cross_garo = sorted(cross)
if cross_sero[0] == cross_sero[-1]:
return ["*"]
else:
max_sero = cross_sero[-1][1] - cross_sero[0][1] + 1
max_garo = cross_garo[-1][0] - cross_garo[0][0] + 1
visited = [[False for _ in range(max_garo)] for _ in range(max_sero)]
start_x = cross_garo[0][0]
start_y = cross_sero[-1][1]
for x, y in cross_sero:
nx = x - start_x
ny = start_y - y
visited[ny][nx] = True
for y in range(max_sero):
tmp = ""
for x in range(max_garo):
if visited[y][x]:
tmp += "*"
else:
tmp +="."
answer.append(tmp)
return answer