[Programmers] 교점에 별 만들기
[Programmers] 교점에 별 만들기
Question
Language: Python
주어진 등식에 대한 교점 중에서 정수 좌표만을 취해서 해당 좌표들로 만들 수 있는 최소 크기의 별을 출력해야한다.
아래의 수식을 이용해 교점을 어렵지 않게 구할 수 있다.
구해진 좌표들은 음수, 양수가 뒤섞여있는 좌표들인데, 이를 모두 양수값으로 만들어주기 위해 각 x,y 좌표의 최소 좌표를 이용해서 대칭 이동시켜준다. 그런 다음, 각 좌표들의 최대 좌표값을 활용해서 격자 무늬 그래프를 만들어주고, 교점에 해당하는 부분에는 별을 표시해주도록 한다.
Solution
def solution(line):
answer = []
x_coordinates=[]
y_coordinates=[]
length=len(line)
for i in range(length):
for j in range(length):
if i==j:
continue
(a,b,e)=line[i]
(c,d,f)=line[j]
if a*d - b*c ==0:
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_coordinates.append(int(x))
y_coordinates.append(int(y))
min_x=min(x_coordinates)
min_y=min(y_coordinates)
#모든 좌표값을 양수로 만들어주기 위해 대칭이동 시켜줌
x_coordinates=list(map(lambda x : x +(-min_x + 1),x_coordinates))
y_coordinates=list(map(lambda x : x +(-min_y + 1),y_coordinates))
max_x=max(x_coordinates)
max_y=max(y_coordinates)
#격자 무늬 그래프 생성
graph=[["."]*(max_x) for _ in range(max_y)]
#교점에 해당하는 부분에 별 표시
for col,row in zip(x_coordinates,y_coordinates):
graph[max_y-row][col-1]="*"
#리스트 형태의 데이터를 문자열로 변환
for sub_graph in graph:
answer.append("".join(sub_graph))
return answer
댓글남기기