728x90
반응형
문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/87377
풀이:
from itertools import combinations
def meet_spot(x, y):
a,b,c = x # ax+by=c
d,e,f = y # dx+ey=f
if a*e == b*d:
return
x = (b * f - c * e) / (a * e - b * d)
y = (c * d - a * f) / (a * e - b * d)
if x== int(x) and y == int(y) :
return int(x), int(y)
def solution(line):
xy_spot = set() # 교점에 들어갈것들
for a, b in list(combinations(line,2)):
spot = meet_spot(a,b)
if spot:
xy_spot.add(spot)
y_spot = sorted(xy_spot, key=lambda x : x[1]) # y최소 최대값
x_spot = sorted(xy_spot, key=lambda x : x[0]) # x 최소 최대
min_x, max_x =x_spot[0][0],x_spot[-1][0] # 8
min_y, max_y =y_spot[0][1],y_spot[-1][1] # 8
board = [['.'] * (max_x - min_x +1) for _ in range(max_y - min_y +1)]
for x,y in xy_spot:
board[max_y - y][x-min_x] = "*"
res = []
for i in board:
res.append("".join(i))
return res
# return list(map("".join,board))
mee_spot 은 교점 구하는 공식을 사용하였다. 중학교 공식이다 검색하면 나온다..
def solution(line):
xy_spot = set() # 교점에 들어갈것들
for a, b in list(combinations(line,2)): # 두 직선씩 골라서
spot = meet_spot(a,b) # 교점이 있나?? 확인
if spot: # 있으면 없으면None 이 리턴됨
xy_spot.add(spot) # 넣어줌
y_spot = sorted(xy_spot, key=lambda x : x[1]) # y최소 최대값
x_spot = sorted(xy_spot, key=lambda x : x[0]) # x 최소 최대
min_x, max_x =x_spot[0][0],x_spot[-1][0]
min_y, max_y =y_spot[0][1],y_spot[-1][1]
교점중 각 x,y 최솟값 최댓값 구해준다
board = [['.'] * (max_x - min_x +1) for _ in range(max_y - min_y +1)]
# 만약 최소-4,최대 4면 결국 길이 9 니깐 +1 x,y둘다
for x,y in xy_spot:
board[max_y - y][x-min_x] = "*"
# 별을 찍어준다. 어렵다 이부분
res = []
for i in board:
res.append("".join(i))
return res
##
return list(map("".join,board))
# 이렇게도 할 수 있는데 join 함수에 대해 더 공부해야겠다
어떤 대단한 사람은 한줄로 끝내버렸다,,
반응형
댓글