더북(TheBook)

처음부터 역순으로 진행해서 문제를 풀면 이러한 비용을 걱정할 필요 없이 바로 답을 만들 수 있으나 지금 시점에서는 조금 어려울 수 있습니다. 이번 문제에서는 이 정도의 추가 비용은 전혀 문제가 되지 않으므로 시간 복잡도를 약간 희생하는 방향으로 진행했습니다.

이렇게 정답 코드가 완성되었습니다. 여러분이 작성한 코드와 비교해서 다른 점이 있는지 살펴보세요.

 

전체 코드

3장/교점에_별_만들기.py

def solution(line):
    #prevent swallow copy
    pos, answer = [], []
    n = len(line)
  
    x_min = y_min = int(1e15)
    x_max = y_max = -int(1e15)
  
    for i in range(n):
        a, b, e = line[i]
        for j in range(i + 1, n):
            c, d, f = line[j]
 
            if a * d == b * c :
                continue
              
            x = (b * f - e * d) / (a * d - b * c)
            y = (e * c - a * f) / (a * d - b * c)

            if x == int(x) and y == int(y):
                x = int(x)
                y = int(y)
                pos.append([x,y])
                if x_min > x: x_min = x
                if y_min > y: y_min = y
                if x_max < x: x_max = x 
                if y_max < y: y_max = y 

    x_len = x_max - x_min + 1
    y_len = y_max - y_min + 1
    coord = [['.'] * x_len for _ in range(y_len)]

    for star_x, star_y in pos:
        nx = star_x + abs(x_min) if x_min < 0 else star_x - x_min
        ny = star_y + abs(y_min) if y_min < 0 else star_y - y_min
        coord[ny][nx] = '*'
      
    for result in coord: answer.append(''.join(result))

    return answer[::-1]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.