https://programmers.co.kr/learn/courses/30/lessons/87377
2차원 평면상의 좌표와 2차원 배열의 좌표를 구하는데 시간이 오래 걸렸던 문제다.
알고리즘은 다음과 같다.
1. ad-bc != 0이 아닌 조건을 통해 교점을 구하고, 정수로 나타낼 수 있는 교점일 경우 교점 리스트에 추가해준다.
2. 교점의 집합에서 x, y 좌표의 최댓값과 최솟값을 구해서 2차원 배열을 초기화시켜준다.
3. 2차원 평면상의 좌표를 2차원 배열의 좌표로 찍어내려면
x, y = abs(y_max-b) , abs(x_min-a)의 공식으로 구할 수 있다.
나의 풀이
def solution(line):
star_list = []
for i in range(len(line)):
for j in range(i+1,len(line)):
a, b, e = line[i]
c, d, f = line[j]
if a*d - b*c !=0:
x,y = (b*f-e*d)/(a*d - b*c) , (e*c-a*f)/(a*d - b*c)
if x.is_integer() and y.is_integer():
x,y = int(x),int(y)
if (x,y) not in star_list:
star_list.append((x,y))
x_min, x_max, y_min, y_max = min(star_list)[0],max(star_list)[0],min(star_list,key = lambda x: x[1])[1],max(star_list,key = lambda x: x[1])[1]
star = [['.']*(abs(x_max-x_min)+1) for _ in range((abs(y_max-y_min)+1))]
for s in star_list:
a,b = s
x,y = abs(y_max-b) , abs(x_min-a)
star[x][y] = '*'
for i,v in enumerate(star):
star[i] = ''.join(v)
return star
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 모음사전 (Python) (0) | 2021.11.03 |
---|---|
[프로그래머스] 전력망을 둘로 나누기 (Python) (0) | 2021.11.03 |
[프로그래머스] 영어 끝말잇기 (Python) (0) | 2021.11.02 |
[프로그래머스] 삼각 달팽이 (Python) (0) | 2021.11.02 |
[프로그래머스] 2개 이하로 다른 비트(Python) (0) | 2021.11.02 |
댓글