본문 바로가기

study/알고리즘

[알고리즘/프로그래머스] 교점에 별 만들기

위클리 챌린지 > 교점에 별 만들기

 

코딩테스트 연습 - 교점에 별 만들기

[[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, -

programmers.co.kr

 

 

나의 풀이

 

- 각 min값을 좌표 0으로 바꾸듯이 구하면 box가 밑에서부터 차기 때문에 뒤집어서 저장해 출력해주어야 함

 

import itertools

def solution(line):
    dot = []
    result = list(itertools.combinations(line, 2))
    for line1, line2 in result:
        if line1[0]*line2[1] - line1[1]*line2[0] == 0:
            continue
        x = (line1[1]*line2[2] - line1[2]*line2[1])/(line1[0]*line2[1] - line1[1]*line2[0])
        y = (line1[2]*line2[0] - line1[0]*line2[2])/(line1[0]*line2[1] - line1[1]*line2[0])
        
        if x == int(x) and y == int(y):
            dot.append([int(x), int(y)])
            
    h_dot = [min(x[0] for x in dot), max(x[0] for x in dot)]
    w_dot = [min(x[1] for x in dot), max(x[1] for x in dot)]

    box = [['.' for _ in range(h_dot[0], h_dot[1]+1)] for _ in range(w_dot[0], w_dot[1] + 1)]
    
    for i, j in dot:
        box[j-w_dot[0]][i-h_dot[0]] = '*'
    
    answer = []
    for i in box:
        answer.insert(0, ''.join(i))
    
    return answer

 

다른사람의 풀이

 

- 정수인지 아닌지 구하는 함수

 

value.is_integer()

 

- x, y = abs(y_max-b) , abs(x_min-a)로 구하면 반대로 출력되지 않음